├── .gitattributes
├── .gitignore
├── LanguageFiles
└── zh_cn.lang
├── README.md
├── TeconMoon's WiiVC Injector.sln
├── TeconMoon's WiiVC Injector
├── App.config
├── Build.cs
├── BuildBatch.cs
├── BuildEvent.cs
├── BuildSource.cs
├── BuildSpawn.cs
├── BuildStep.cs
├── BuildSystemType.cs
├── Form1.Designer.cs
├── Form1.cs
├── Form1.resx
├── Form2.Designer.cs
├── Form2.cs
├── Form2.resx
├── LogLevels.cs
├── Program.cs
├── Properties
│ ├── AssemblyInfo.cs
│ ├── Resources.Designer.cs
│ ├── Resources.resx
│ ├── Settings.Designer.cs
│ ├── Settings.settings
│ └── app.manifest
├── Resources
│ ├── TOOLDIR.zip
│ ├── autoscroll.png
│ ├── clearbuildoutput.png
│ ├── gc.ttf
│ ├── ids.csv
│ ├── universal_Wii_WiiWare_template_bootTvTex.png
│ ├── universal_Wii_WiiWare_template_iconTex.png
│ ├── wii.ttf
│ └── wiiware.png
├── SplitButton.cs
├── TeconMoon's WiiVC Injector.csproj
├── Tga.cs
├── Trt.cs
├── Utils.cs
├── WiiU.ico
└── Win32Native.cs
└── nintendontvalues.txt
/.gitattributes:
--------------------------------------------------------------------------------
1 | ###############################################################################
2 | # Set default behavior to automatically normalize line endings.
3 | ###############################################################################
4 | * text=auto
5 |
6 | ###############################################################################
7 | # Set default behavior for command prompt diff.
8 | #
9 | # This is need for earlier builds of msysgit that does not have it on by
10 | # default for csharp files.
11 | # Note: This is only used by command line
12 | ###############################################################################
13 | #*.cs diff=csharp
14 |
15 | ###############################################################################
16 | # Set the merge driver for project and solution files
17 | #
18 | # Merging from the command prompt will add diff markers to the files if there
19 | # are conflicts (Merging from VS is not affected by the settings below, in VS
20 | # the diff markers are never inserted). Diff markers may cause the following
21 | # file extensions to fail to load in VS. An alternative would be to treat
22 | # these files as binary and thus will always conflict and require user
23 | # intervention with every merge. To do so, just uncomment the entries below
24 | ###############################################################################
25 | #*.sln merge=binary
26 | #*.csproj merge=binary
27 | #*.vbproj merge=binary
28 | #*.vcxproj merge=binary
29 | #*.vcproj merge=binary
30 | #*.dbproj merge=binary
31 | #*.fsproj merge=binary
32 | #*.lsproj merge=binary
33 | #*.wixproj merge=binary
34 | #*.modelproj merge=binary
35 | #*.sqlproj merge=binary
36 | #*.wwaproj merge=binary
37 |
38 | ###############################################################################
39 | # behavior for image files
40 | #
41 | # image files are treated as binary by default.
42 | ###############################################################################
43 | #*.jpg binary
44 | #*.png binary
45 | #*.gif binary
46 |
47 | ###############################################################################
48 | # diff behavior for common document formats
49 | #
50 | # Convert binary document formats to text before diffing them. This feature
51 | # is only available from the command line. Turn it on by uncommenting the
52 | # entries below.
53 | ###############################################################################
54 | #*.doc diff=astextplain
55 | #*.DOC diff=astextplain
56 | #*.docx diff=astextplain
57 | #*.DOCX diff=astextplain
58 | #*.dot diff=astextplain
59 | #*.DOT diff=astextplain
60 | #*.pdf diff=astextplain
61 | #*.PDF diff=astextplain
62 | #*.rtf diff=astextplain
63 | #*.RTF diff=astextplain
64 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Ignore Visual Studio temporary files, build results, and
2 | ## files generated by popular Visual Studio add-ons.
3 |
4 | # User-specific files
5 | *.suo
6 | *.user
7 | *.userosscache
8 | *.sln.docstates
9 |
10 | # User-specific files (MonoDevelop/Xamarin Studio)
11 | *.userprefs
12 |
13 | # Build results
14 | [Dd]ebug/
15 | [Dd]ebugPublic/
16 | [Rr]elease/
17 | [Rr]eleases/
18 | x64/
19 | x86/
20 | bld/
21 | [Bb]in/
22 | [Oo]bj/
23 | [Ll]og/
24 |
25 | # Visual Studio 2015 cache/options directory
26 | .vs/
27 | # Uncomment if you have tasks that create the project's static files in wwwroot
28 | #wwwroot/
29 |
30 | # MSTest test Results
31 | [Tt]est[Rr]esult*/
32 | [Bb]uild[Ll]og.*
33 |
34 | # NUNIT
35 | *.VisualState.xml
36 | TestResult.xml
37 |
38 | # Build Results of an ATL Project
39 | [Dd]ebugPS/
40 | [Rr]eleasePS/
41 | dlldata.c
42 |
43 | # DNX
44 | project.lock.json
45 | project.fragment.lock.json
46 | artifacts/
47 |
48 | *_i.c
49 | *_p.c
50 | *_i.h
51 | *.ilk
52 | *.meta
53 | *.obj
54 | *.pch
55 | *.pdb
56 | *.pgc
57 | *.pgd
58 | *.rsp
59 | *.sbr
60 | *.tlb
61 | *.tli
62 | *.tlh
63 | *.tmp
64 | *.tmp_proj
65 | *.log
66 | *.vspscc
67 | *.vssscc
68 | .builds
69 | *.pidb
70 | *.svclog
71 | *.scc
72 |
73 | # Chutzpah Test files
74 | _Chutzpah*
75 |
76 | # Visual C++ cache files
77 | ipch/
78 | *.aps
79 | *.ncb
80 | *.opendb
81 | *.opensdf
82 | *.sdf
83 | *.cachefile
84 | *.VC.db
85 | *.VC.VC.opendb
86 |
87 | # Visual Studio profiler
88 | *.psess
89 | *.vsp
90 | *.vspx
91 | *.sap
92 |
93 | # TFS 2012 Local Workspace
94 | $tf/
95 |
96 | # Guidance Automation Toolkit
97 | *.gpState
98 |
99 | # ReSharper is a .NET coding add-in
100 | _ReSharper*/
101 | *.[Rr]e[Ss]harper
102 | *.DotSettings.user
103 |
104 | # JustCode is a .NET coding add-in
105 | .JustCode
106 |
107 | # TeamCity is a build add-in
108 | _TeamCity*
109 |
110 | # DotCover is a Code Coverage Tool
111 | *.dotCover
112 |
113 | # NCrunch
114 | _NCrunch_*
115 | .*crunch*.local.xml
116 | nCrunchTemp_*
117 |
118 | # MightyMoose
119 | *.mm.*
120 | AutoTest.Net/
121 |
122 | # Web workbench (sass)
123 | .sass-cache/
124 |
125 | # Installshield output folder
126 | [Ee]xpress/
127 |
128 | # DocProject is a documentation generator add-in
129 | DocProject/buildhelp/
130 | DocProject/Help/*.HxT
131 | DocProject/Help/*.HxC
132 | DocProject/Help/*.hhc
133 | DocProject/Help/*.hhk
134 | DocProject/Help/*.hhp
135 | DocProject/Help/Html2
136 | DocProject/Help/html
137 |
138 | # Click-Once directory
139 | publish/
140 |
141 | # Publish Web Output
142 | *.[Pp]ublish.xml
143 | *.azurePubxml
144 | # TODO: Comment the next line if you want to checkin your web deploy settings
145 | # but database connection strings (with potential passwords) will be unencrypted
146 | #*.pubxml
147 | *.publishproj
148 |
149 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
150 | # checkin your Azure Web App publish settings, but sensitive information contained
151 | # in these scripts will be unencrypted
152 | PublishScripts/
153 |
154 | # NuGet Packages
155 | *.nupkg
156 | # The packages folder can be ignored because of Package Restore
157 | **/packages/*
158 | # except build/, which is used as an MSBuild target.
159 | !**/packages/build/
160 | # Uncomment if necessary however generally it will be regenerated when needed
161 | #!**/packages/repositories.config
162 | # NuGet v3's project.json files produces more ignoreable files
163 | *.nuget.props
164 | *.nuget.targets
165 |
166 | # Microsoft Azure Build Output
167 | csx/
168 | *.build.csdef
169 |
170 | # Microsoft Azure Emulator
171 | ecf/
172 | rcf/
173 |
174 | # Windows Store app package directories and files
175 | AppPackages/
176 | BundleArtifacts/
177 | Package.StoreAssociation.xml
178 | _pkginfo.txt
179 |
180 | # Visual Studio cache files
181 | # files ending in .cache can be ignored
182 | *.[Cc]ache
183 | # but keep track of directories ending in .cache
184 | !*.[Cc]ache/
185 |
186 | # Others
187 | ClientBin/
188 | ~$*
189 | *~
190 | *.dbmdl
191 | *.dbproj.schemaview
192 | *.jfm
193 | *.pfx
194 | *.publishsettings
195 | node_modules/
196 | orleans.codegen.cs
197 |
198 | # Since there are multiple workflows, uncomment next line to ignore bower_components
199 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
200 | #bower_components/
201 |
202 | # RIA/Silverlight projects
203 | Generated_Code/
204 |
205 | # Backup & report files from converting an old project file
206 | # to a newer Visual Studio version. Backup files are not needed,
207 | # because we have git ;-)
208 | _UpgradeReport_Files/
209 | Backup*/
210 | UpgradeLog*.XML
211 | UpgradeLog*.htm
212 |
213 | # SQL Server files
214 | *.mdf
215 | *.ldf
216 |
217 | # Business Intelligence projects
218 | *.rdl.data
219 | *.bim.layout
220 | *.bim_*.settings
221 |
222 | # Microsoft Fakes
223 | FakesAssemblies/
224 |
225 | # GhostDoc plugin setting file
226 | *.GhostDoc.xml
227 |
228 | # Node.js Tools for Visual Studio
229 | .ntvs_analysis.dat
230 |
231 | # Visual Studio 6 build log
232 | *.plg
233 |
234 | # Visual Studio 6 workspace options file
235 | *.opt
236 |
237 | # Visual Studio LightSwitch build output
238 | **/*.HTMLClient/GeneratedArtifacts
239 | **/*.DesktopClient/GeneratedArtifacts
240 | **/*.DesktopClient/ModelManifest.xml
241 | **/*.Server/GeneratedArtifacts
242 | **/*.Server/ModelManifest.xml
243 | _Pvt_Extensions
244 |
245 | # Paket dependency manager
246 | .paket/paket.exe
247 | paket-files/
248 |
249 | # FAKE - F# Make
250 | .fake/
251 |
252 | # JetBrains Rider
253 | .idea/
254 | *.sln.iml
255 |
256 | # CodeRush
257 | .cr/
258 |
259 | # Python Tools for Visual Studio (PTVS)
260 | __pycache__/
261 | *.pyc
--------------------------------------------------------------------------------
/LanguageFiles/zh_cn.lang:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timefox/TeconMoon-s-WiiVC-Injector-Mod/5fe2b874ca2f05a266bb51cc0f6f58709d71fd90/LanguageFiles/zh_cn.lang
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # TeconMoon-s-WiiVC-Injector-Mod
2 | TeconMoon's WiiVC Injector Mod is a modification version of TeconMoon's WiiVC Injector which is created by TeconMoon(GBAtemp.net) originally.
3 |
4 | The original release post is https://gbatemp.net/threads/release-wiivc-injector-script-gc-wii-homebrew-support.483577/.
5 |
6 | Many thanks to TeconMoon for this great work and sharing.
7 |
--------------------------------------------------------------------------------
/TeconMoon's WiiVC Injector.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 15
4 | VisualStudioVersion = 15.0.26730.16
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TeconMoon's WiiVC Injector", "TeconMoon's WiiVC Injector\TeconMoon's WiiVC Injector.csproj", "{8228DC31-4869-4C1C-8AED-D7ED37ECF3B9}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|Any CPU = Debug|Any CPU
11 | Release|Any CPU = Release|Any CPU
12 | EndGlobalSection
13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
14 | {8228DC31-4869-4C1C-8AED-D7ED37ECF3B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
15 | {8228DC31-4869-4C1C-8AED-D7ED37ECF3B9}.Debug|Any CPU.Build.0 = Debug|Any CPU
16 | {8228DC31-4869-4C1C-8AED-D7ED37ECF3B9}.Release|Any CPU.ActiveCfg = Release|Any CPU
17 | {8228DC31-4869-4C1C-8AED-D7ED37ECF3B9}.Release|Any CPU.Build.0 = Release|Any CPU
18 | EndGlobalSection
19 | GlobalSection(SolutionProperties) = preSolution
20 | HideSolutionNode = FALSE
21 | EndGlobalSection
22 | GlobalSection(ExtensibilityGlobals) = postSolution
23 | SolutionGuid = {03A3BE64-2666-450F-A28D-333D71299683}
24 | EndGlobalSection
25 | EndGlobal
26 |
--------------------------------------------------------------------------------
/TeconMoon's WiiVC Injector/App.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/TeconMoon's WiiVC Injector/BuildBatch.cs:
--------------------------------------------------------------------------------
1 | using System.IO;
2 | using System.Linq;
3 | using System.Windows.Forms;
4 | using TeconMoon_s_WiiVC_Injector.Utils.Build;
5 |
6 | namespace TeconMoon_s_WiiVC_Injector
7 | {
8 | partial class WiiVC_Injector
9 | {
10 | private void BatchBuild()
11 | {
12 | if (!Program.BatchBuildList.Any())
13 | {
14 | return;
15 | }
16 |
17 | if (IsBuilding)
18 | {
19 | Program.BatchBuildList.Clear();
20 | return;
21 | }
22 |
23 | BuildOutput.ResetText();
24 |
25 | BatchBuildSucceedList.Clear();
26 | BatchBuildFailedList.Clear();
27 | BatchBuildInvalidList.Clear();
28 | BatchBuildSkippedList.Clear();
29 |
30 | PreBuild = (s, e) =>
31 | {
32 | BuildOutput.ResetText();
33 | PrintBuildOverview();
34 | };
35 |
36 | PostBuild += WiiVC_Injector_PostBuild;
37 |
38 | PromptForSucceed = false;
39 | BatchBuildNext();
40 | }
41 |
42 | private bool BatchBuildCurrent()
43 | {
44 | // Switch to Source Files Tab.
45 | MainTabs.SelectedIndex = MainTabs.TabPages.IndexOfKey("SourceFilesTab");
46 |
47 | // Auto generate images.
48 | GenerateImage.PerformClick();
49 |
50 | // Switch to Build Tab.
51 | MainTabs.SelectedIndex = MainTabs.TabPages.IndexOfKey("BuildTab");
52 |
53 | // Check if everything is ready.
54 | if (TheBigOneTM.Enabled && !IsBuilding)
55 | {
56 | // Ready to rumble. :)
57 | return BuildAnsync();
58 | }
59 |
60 | return false;
61 | }
62 |
63 | private void BatchBuildNext()
64 | {
65 | while (Program.BatchBuildList.Any())
66 | {
67 | string game = Program.BatchBuildList[0];
68 |
69 | // Search for second disc
70 | if (GCRetail.Checked)
71 | {
72 | string[] discs = SearchGCDiscs(game);
73 | game = discs[0];
74 | if (discs.Length > 1)
75 | {
76 | OpenGC2.FileName = discs[1];
77 | SelectGC2Source(discs[1]);
78 | }
79 | }
80 |
81 | if (SelectGameSource(game, true))
82 | {
83 | if (Directory.Exists(GetOutputFolder()))
84 | {
85 | AppendBuildOutput(
86 | string.Format(
87 | Trt.Tr("Title output folder already exists: {0}\nSkipping: {1}.\n"),
88 | GetOutputFolder(), game),
89 | BuildOutputType.Error);
90 |
91 | BatchBuildSkippedList.Add(game);
92 | Program.BatchBuildList.RemoveAt(0);
93 | continue;
94 | }
95 | else
96 | {
97 | BatchBuildCurrent();
98 | PreBuild = null;
99 | break;
100 | }
101 | }
102 |
103 | AppendBuildOutput(
104 | string.Format(Trt.Tr("Invalid Title: {0}.\n"), game),
105 | BuildOutputType.Error);
106 |
107 | BatchBuildInvalidList.Add(game);
108 | Program.BatchBuildList.RemoveAt(0);
109 | }
110 |
111 | if (!Program.BatchBuildList.Any())
112 | {
113 | PostBuild -= WiiVC_Injector_PostBuild;
114 |
115 | if (!InClosing)
116 | {
117 | MessageBox.Show(string.Format(
118 | Trt.Tr("All conversions have been completed.\nSucceed: {0}.\nFailed: {1}.\nSkipped: {2}.\nInvalid: {3}."),
119 | BatchBuildSucceedList.Count,
120 | BatchBuildFailedList.Count,
121 | BatchBuildSkippedList.Count,
122 | BatchBuildInvalidList.Count));
123 | }
124 | }
125 | }
126 |
127 | private void WiiVC_Injector_PostBuild(object sender, bool e)
128 | {
129 | if (e)
130 | {
131 | BatchBuildSucceedList.Add(Program.BatchBuildList[0]);
132 | }
133 | else
134 | {
135 | BatchBuildFailedList.Add(Program.BatchBuildList[0]);
136 | }
137 |
138 | Program.BatchBuildList.RemoveAt(0);
139 |
140 | if (LastBuildCancelled)
141 | {
142 | BatchBuildSkippedList.AddRange(Program.BatchBuildList);
143 | Program.BatchBuildList.Clear();
144 | }
145 |
146 | BatchBuildNext();
147 | }
148 | }
149 | }
--------------------------------------------------------------------------------
/TeconMoon's WiiVC Injector/BuildEvent.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | namespace TeconMoon_s_WiiVC_Injector
4 | {
5 | partial class WiiVC_Injector
6 | {
7 | private event EventHandler PreBuild;
8 | private event EventHandler PostBuild;
9 | }
10 | }
--------------------------------------------------------------------------------
/TeconMoon's WiiVC Injector/BuildSource.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 |
7 | namespace TeconMoon_s_WiiVC_Injector
8 | {
9 | partial class WiiVC_Injector
10 | {
11 |
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/TeconMoon's WiiVC Injector/BuildSpawn.cs:
--------------------------------------------------------------------------------
1 | using LogLevels;
2 | using System;
3 | using System.Diagnostics;
4 | using TeconMoon_s_WiiVC_Injector.Utils.Build;
5 |
6 | namespace TeconMoon_s_WiiVC_Injector
7 | {
8 | partial class WiiVC_Injector
9 | {
10 | public string SpawnFile { get; set; }
11 | public string SpawnArgs { get; set; }
12 |
13 | private bool BuildSpawn()
14 | {
15 | bool exitNormally = true;
16 |
17 | ProcessStartInfo spawnInfo = new ProcessStartInfo(SpawnFile, SpawnArgs);
18 |
19 | if (HideProcess)
20 | {
21 | spawnInfo.CreateNoWindow = true;
22 | spawnInfo.WindowStyle = ProcessWindowStyle.Hidden;
23 | }
24 |
25 | spawnInfo.UseShellExecute = false;
26 | spawnInfo.RedirectStandardOutput = true;
27 | spawnInfo.RedirectStandardError = true;
28 |
29 | BuildOutputBuffer buildOutputBuffer = new BuildOutputBuffer();
30 | buildOutputBuffer.FlushBuffer += (s, e) =>
31 | {
32 | BeginInvoke(ActBuildOutput, e);
33 | };
34 |
35 | if (currentLogLevel <= LogLevel.Debug)
36 | {
37 | BeginInvoke(ActBuildOutput, new BuildOutputItem()
38 | {
39 | Output = Trt.Tr("Executing:") + ' ' + SpawnFile + Environment.NewLine
40 | + Trt.Tr("Args:") + ' ' + SpawnArgs + Environment.NewLine,
41 | OutputType = BuildOutputType.Exec
42 | });
43 | }
44 |
45 | try
46 | {
47 | Process spawner = Process.Start(spawnInfo);
48 | System.Timers.Timer OutputPumpTimer = new System.Timers.Timer();
49 |
50 | spawner.OutputDataReceived += (s, d) =>
51 | {
52 | if (currentLogLevel <= LogLevel.Debug)
53 | {
54 | lock (buildOutputBuffer)
55 | {
56 | buildOutputBuffer.AppendOutput(d.Data, BuildOutputType.Normal);
57 | }
58 | }
59 | };
60 |
61 | spawner.ErrorDataReceived += (s, d) =>
62 | {
63 | //
64 | // Whatever, the error information should be printed.
65 | //
66 | lock (buildOutputBuffer)
67 | {
68 | buildOutputBuffer.AppendOutput(d.Data, BuildOutputType.Error);
69 | }
70 | };
71 |
72 | OutputPumpTimer.Interval = 100;
73 | OutputPumpTimer.Elapsed += (sender, e) =>
74 | {
75 | lock (buildOutputBuffer)
76 | {
77 | buildOutputBuffer.Flush();
78 | }
79 | };
80 | OutputPumpTimer.Start();
81 |
82 | spawner.BeginOutputReadLine();
83 | spawner.BeginErrorReadLine();
84 |
85 | while (!spawner.WaitForExit(500))
86 | {
87 | if (LastBuildCancelled)
88 | {
89 | spawner.CloseMainWindow();
90 | if (!spawner.WaitForExit(100))
91 | {
92 | spawner.Kill();
93 | }
94 |
95 | exitNormally = false;
96 | }
97 | }
98 |
99 | OutputPumpTimer.Stop();
100 |
101 | spawner.Close();
102 |
103 | lock (buildOutputBuffer)
104 | {
105 | buildOutputBuffer.Flush();
106 | }
107 | }
108 | catch (Exception ex)
109 | {
110 | Console.WriteLine("BuildSpawn exception: " + ex.Message);
111 |
112 | if (ThrowProcessException)
113 | {
114 | throw ex;
115 | }
116 |
117 | exitNormally = false;
118 | }
119 |
120 | if (!exitNormally && ThrowProcessException)
121 | {
122 | throw new Exception(NormalizeCmdlineArg(SpawnFile)
123 | + Trt.Tr(" does not exit normally."));
124 | }
125 |
126 | return exitNormally;
127 | }
128 | }
129 | }
130 |
--------------------------------------------------------------------------------
/TeconMoon's WiiVC Injector/BuildStep.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 |
7 | namespace TeconMoon_s_WiiVC_Injector
8 | {
9 | class BuildStep
10 | {
11 | public delegate bool BuildAction();
12 |
13 | public BuildAction Action { get; set; }
14 | public string Description { get; set; }
15 | public int ProgressWeight { get; set; }
16 |
17 | public bool Execute()
18 | {
19 | return Action();
20 | }
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/TeconMoon's WiiVC Injector/BuildSystemType.cs:
--------------------------------------------------------------------------------
1 | namespace TeconMoon_s_WiiVC_Injector
2 | {
3 | enum BuildSystemType
4 | {
5 | wii,
6 | gcn,
7 | dol,
8 | wiiware,
9 | };
10 | }
--------------------------------------------------------------------------------
/TeconMoon's WiiVC Injector/Form2.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace TeconMoon_s_WiiVC_Injector
2 | {
3 | partial class SDCardMenu
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Windows Form Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SDCardMenu));
32 | this.DriveBox = new System.Windows.Forms.ComboBox();
33 | this.SDCardText = new System.Windows.Forms.Label();
34 | this.ReloadDrives = new System.Windows.Forms.Button();
35 | this.NintendontUpdate = new System.Windows.Forms.Button();
36 | this.ActionStatus = new System.Windows.Forms.Label();
37 | this.GenerateConfig = new System.Windows.Forms.Button();
38 | this.LanguageBox = new System.Windows.Forms.ComboBox();
39 | this.LanguageText = new System.Windows.Forms.Label();
40 | this.VideoText = new System.Windows.Forms.Label();
41 | this.VideoForceMode = new System.Windows.Forms.ComboBox();
42 | this.VideoTypeMode = new System.Windows.Forms.ComboBox();
43 | this.VideoWidth = new System.Windows.Forms.TrackBar();
44 | this.VideoWidthText = new System.Windows.Forms.Label();
45 | this.WidthNumber = new System.Windows.Forms.Label();
46 | this.MemcardText = new System.Windows.Forms.Label();
47 | this.MemcardBlocks = new System.Windows.Forms.ComboBox();
48 | this.MemcardMulti = new System.Windows.Forms.CheckBox();
49 | this.NintendontOptions = new System.Windows.Forms.CheckedListBox();
50 | this.Format = new System.Windows.Forms.LinkLabel();
51 | ((System.ComponentModel.ISupportInitialize)(this.VideoWidth)).BeginInit();
52 | this.SuspendLayout();
53 | //
54 | // DriveBox
55 | //
56 | this.DriveBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
57 | this.DriveBox.FormattingEnabled = true;
58 | this.DriveBox.Location = new System.Drawing.Point(15, 29);
59 | this.DriveBox.Name = "DriveBox";
60 | this.DriveBox.Size = new System.Drawing.Size(253, 26);
61 | this.DriveBox.TabIndex = 0;
62 | this.DriveBox.SelectedIndexChanged += new System.EventHandler(this.DriveBox_SelectedIndexChanged);
63 | //
64 | // SDCardText
65 | //
66 | this.SDCardText.Location = new System.Drawing.Point(12, 9);
67 | this.SDCardText.Name = "SDCardText";
68 | this.SDCardText.Size = new System.Drawing.Size(145, 17);
69 | this.SDCardText.TabIndex = 1;
70 | this.SDCardText.Text = "Choose your SD Card";
71 | //
72 | // ReloadDrives
73 | //
74 | this.ReloadDrives.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
75 | this.ReloadDrives.Location = new System.Drawing.Point(15, 65);
76 | this.ReloadDrives.Name = "ReloadDrives";
77 | this.ReloadDrives.Size = new System.Drawing.Size(174, 33);
78 | this.ReloadDrives.TabIndex = 2;
79 | this.ReloadDrives.Text = "Reload Drive List";
80 | this.ReloadDrives.UseVisualStyleBackColor = true;
81 | this.ReloadDrives.Click += new System.EventHandler(this.ReloadDrives_Click);
82 | //
83 | // NintendontUpdate
84 | //
85 | this.NintendontUpdate.AutoSize = true;
86 | this.NintendontUpdate.Location = new System.Drawing.Point(15, 141);
87 | this.NintendontUpdate.Name = "NintendontUpdate";
88 | this.NintendontUpdate.Size = new System.Drawing.Size(472, 28);
89 | this.NintendontUpdate.TabIndex = 4;
90 | this.NintendontUpdate.Text = "Download Latest Nintendont from GitHub";
91 | this.NintendontUpdate.UseVisualStyleBackColor = true;
92 | this.NintendontUpdate.Click += new System.EventHandler(this.NintendontUpdate_Click);
93 | //
94 | // ActionStatus
95 | //
96 | this.ActionStatus.Location = new System.Drawing.Point(16, 108);
97 | this.ActionStatus.Name = "ActionStatus";
98 | this.ActionStatus.Size = new System.Drawing.Size(471, 30);
99 | this.ActionStatus.TabIndex = 5;
100 | this.ActionStatus.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
101 | //
102 | // GenerateConfig
103 | //
104 | this.GenerateConfig.AutoSize = true;
105 | this.GenerateConfig.Location = new System.Drawing.Point(15, 179);
106 | this.GenerateConfig.Name = "GenerateConfig";
107 | this.GenerateConfig.Size = new System.Drawing.Size(472, 28);
108 | this.GenerateConfig.TabIndex = 7;
109 | this.GenerateConfig.Text = "Generate Nintendont Config File (nincfg.bin)";
110 | this.GenerateConfig.UseVisualStyleBackColor = true;
111 | this.GenerateConfig.Click += new System.EventHandler(this.GenerateConfig_Click);
112 | //
113 | // LanguageBox
114 | //
115 | this.LanguageBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
116 | this.LanguageBox.FormattingEnabled = true;
117 | this.LanguageBox.Items.AddRange(new object[] {
118 | "Automatic",
119 | "English",
120 | "German",
121 | "French",
122 | "Spanish",
123 | "Italian",
124 | "Dutch"});
125 | this.LanguageBox.Location = new System.Drawing.Point(12, 544);
126 | this.LanguageBox.Name = "LanguageBox";
127 | this.LanguageBox.Size = new System.Drawing.Size(231, 26);
128 | this.LanguageBox.TabIndex = 8;
129 | //
130 | // LanguageText
131 | //
132 | this.LanguageText.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
133 | this.LanguageText.Location = new System.Drawing.Point(12, 511);
134 | this.LanguageText.Name = "LanguageText";
135 | this.LanguageText.Size = new System.Drawing.Size(231, 25);
136 | this.LanguageText.TabIndex = 9;
137 | this.LanguageText.Text = "Language";
138 | this.LanguageText.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
139 | //
140 | // VideoText
141 | //
142 | this.VideoText.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
143 | this.VideoText.Location = new System.Drawing.Point(256, 402);
144 | this.VideoText.Name = "VideoText";
145 | this.VideoText.Size = new System.Drawing.Size(231, 33);
146 | this.VideoText.TabIndex = 11;
147 | this.VideoText.Text = "Video Mode";
148 | this.VideoText.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
149 | //
150 | // VideoForceMode
151 | //
152 | this.VideoForceMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
153 | this.VideoForceMode.FormattingEnabled = true;
154 | this.VideoForceMode.Items.AddRange(new object[] {
155 | "Auto",
156 | "Force",
157 | "Force (Deflicker)",
158 | "None"});
159 | this.VideoForceMode.Location = new System.Drawing.Point(256, 436);
160 | this.VideoForceMode.Name = "VideoForceMode";
161 | this.VideoForceMode.Size = new System.Drawing.Size(231, 26);
162 | this.VideoForceMode.TabIndex = 10;
163 | this.VideoForceMode.SelectedIndexChanged += new System.EventHandler(this.VideoForceMode_SelectedIndexChanged);
164 | //
165 | // VideoTypeMode
166 | //
167 | this.VideoTypeMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
168 | this.VideoTypeMode.FormattingEnabled = true;
169 | this.VideoTypeMode.Items.AddRange(new object[] {
170 | "Auto",
171 | "NTSC",
172 | "MPAL",
173 | "PAL50",
174 | "PAL60"});
175 | this.VideoTypeMode.Location = new System.Drawing.Point(256, 463);
176 | this.VideoTypeMode.Name = "VideoTypeMode";
177 | this.VideoTypeMode.Size = new System.Drawing.Size(231, 26);
178 | this.VideoTypeMode.TabIndex = 12;
179 | this.VideoTypeMode.SelectedIndexChanged += new System.EventHandler(this.VideoTypeMode_SelectedIndexChanged);
180 | //
181 | // VideoWidth
182 | //
183 | this.VideoWidth.AutoSize = false;
184 | this.VideoWidth.BackColor = System.Drawing.SystemColors.Control;
185 | this.VideoWidth.Enabled = false;
186 | this.VideoWidth.LargeChange = 10;
187 | this.VideoWidth.Location = new System.Drawing.Point(256, 546);
188 | this.VideoWidth.Maximum = 720;
189 | this.VideoWidth.Minimum = 640;
190 | this.VideoWidth.Name = "VideoWidth";
191 | this.VideoWidth.Size = new System.Drawing.Size(231, 26);
192 | this.VideoWidth.SmallChange = 2;
193 | this.VideoWidth.TabIndex = 13;
194 | this.VideoWidth.TickFrequency = 2;
195 | this.VideoWidth.Value = 640;
196 | this.VideoWidth.Scroll += new System.EventHandler(this.VideoWidth_Scroll);
197 | //
198 | // VideoWidthText
199 | //
200 | this.VideoWidthText.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
201 | this.VideoWidthText.Enabled = false;
202 | this.VideoWidthText.Location = new System.Drawing.Point(256, 490);
203 | this.VideoWidthText.Name = "VideoWidthText";
204 | this.VideoWidthText.Size = new System.Drawing.Size(231, 30);
205 | this.VideoWidthText.TabIndex = 14;
206 | this.VideoWidthText.Text = "Video Width";
207 | this.VideoWidthText.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
208 | //
209 | // WidthNumber
210 | //
211 | this.WidthNumber.Location = new System.Drawing.Point(256, 521);
212 | this.WidthNumber.Name = "WidthNumber";
213 | this.WidthNumber.Size = new System.Drawing.Size(231, 24);
214 | this.WidthNumber.TabIndex = 15;
215 | this.WidthNumber.Text = "Auto";
216 | this.WidthNumber.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
217 | //
218 | // MemcardText
219 | //
220 | this.MemcardText.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
221 | this.MemcardText.Enabled = false;
222 | this.MemcardText.Location = new System.Drawing.Point(12, 402);
223 | this.MemcardText.Name = "MemcardText";
224 | this.MemcardText.Size = new System.Drawing.Size(231, 33);
225 | this.MemcardText.TabIndex = 16;
226 | this.MemcardText.Text = "Memcard Blocks";
227 | this.MemcardText.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
228 | //
229 | // MemcardBlocks
230 | //
231 | this.MemcardBlocks.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
232 | this.MemcardBlocks.Enabled = false;
233 | this.MemcardBlocks.FormattingEnabled = true;
234 | this.MemcardBlocks.Items.AddRange(new object[] {
235 | "59",
236 | "123",
237 | "251",
238 | "507 (Unstable)",
239 | "1019 (Unstable)",
240 | "2043 (Unstable)"});
241 | this.MemcardBlocks.Location = new System.Drawing.Point(12, 443);
242 | this.MemcardBlocks.Name = "MemcardBlocks";
243 | this.MemcardBlocks.Size = new System.Drawing.Size(231, 26);
244 | this.MemcardBlocks.TabIndex = 17;
245 | //
246 | // MemcardMulti
247 | //
248 | this.MemcardMulti.Enabled = false;
249 | this.MemcardMulti.Location = new System.Drawing.Point(12, 477);
250 | this.MemcardMulti.Name = "MemcardMulti";
251 | this.MemcardMulti.Size = new System.Drawing.Size(231, 26);
252 | this.MemcardMulti.TabIndex = 18;
253 | this.MemcardMulti.Text = "Memcard Multi";
254 | this.MemcardMulti.UseVisualStyleBackColor = false;
255 | //
256 | // NintendontOptions
257 | //
258 | this.NintendontOptions.CheckOnClick = true;
259 | this.NintendontOptions.FormattingEnabled = true;
260 | this.NintendontOptions.Items.AddRange(new object[] {
261 | "Cheats",
262 | "Memcard Emulation",
263 | "Cheat Path",
264 | "Force Widescreen",
265 | "Force Progressive",
266 | "Unlock Read Speed",
267 | "OSReport",
268 | "WiiU Widescreen",
269 | "Log",
270 | "Auto Video Width",
271 | "Patch PAL50",
272 | "TRI Arcade Mode",
273 | "Wiimote CC Rumble",
274 | "Skip IPL"});
275 | this.NintendontOptions.Location = new System.Drawing.Point(15, 219);
276 | this.NintendontOptions.MultiColumn = true;
277 | this.NintendontOptions.Name = "NintendontOptions";
278 | this.NintendontOptions.Size = new System.Drawing.Size(472, 179);
279 | this.NintendontOptions.TabIndex = 6;
280 | this.NintendontOptions.SelectedIndexChanged += new System.EventHandler(this.NintendontOptions_SelectedIndexChanged);
281 | this.NintendontOptions.DoubleClick += new System.EventHandler(this.NintendontOptions_DoubleClick);
282 | //
283 | // Format
284 | //
285 | this.Format.AutoSize = true;
286 | this.Format.Location = new System.Drawing.Point(200, 72);
287 | this.Format.Name = "Format";
288 | this.Format.Size = new System.Drawing.Size(287, 18);
289 | this.Format.TabIndex = 19;
290 | this.Format.TabStop = true;
291 | this.Format.Text = "Use this to format your SD Card";
292 | this.Format.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.Format_LinkClicked);
293 | //
294 | // SDCardMenu
295 | //
296 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
297 | this.ClientSize = new System.Drawing.Size(499, 585);
298 | this.Controls.Add(this.Format);
299 | this.Controls.Add(this.MemcardMulti);
300 | this.Controls.Add(this.MemcardBlocks);
301 | this.Controls.Add(this.MemcardText);
302 | this.Controls.Add(this.WidthNumber);
303 | this.Controls.Add(this.VideoWidthText);
304 | this.Controls.Add(this.VideoWidth);
305 | this.Controls.Add(this.VideoTypeMode);
306 | this.Controls.Add(this.VideoText);
307 | this.Controls.Add(this.VideoForceMode);
308 | this.Controls.Add(this.LanguageText);
309 | this.Controls.Add(this.LanguageBox);
310 | this.Controls.Add(this.GenerateConfig);
311 | this.Controls.Add(this.NintendontOptions);
312 | this.Controls.Add(this.ActionStatus);
313 | this.Controls.Add(this.NintendontUpdate);
314 | this.Controls.Add(this.ReloadDrives);
315 | this.Controls.Add(this.SDCardText);
316 | this.Controls.Add(this.DriveBox);
317 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D;
318 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
319 | this.Margin = new System.Windows.Forms.Padding(4);
320 | this.MaximizeBox = false;
321 | this.MinimizeBox = false;
322 | this.Name = "SDCardMenu";
323 | this.ShowInTaskbar = false;
324 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
325 | this.Text = "Nintendont SD Card Menu...";
326 | this.Load += new System.EventHandler(this.SDCardMenu_Load);
327 | ((System.ComponentModel.ISupportInitialize)(this.VideoWidth)).EndInit();
328 | this.ResumeLayout(false);
329 | this.PerformLayout();
330 |
331 | }
332 |
333 | #endregion
334 |
335 | private System.Windows.Forms.ComboBox DriveBox;
336 | private System.Windows.Forms.Label SDCardText;
337 | private System.Windows.Forms.Button ReloadDrives;
338 | private System.Windows.Forms.Button NintendontUpdate;
339 | private System.Windows.Forms.Label ActionStatus;
340 | private System.Windows.Forms.Button GenerateConfig;
341 | private System.Windows.Forms.ComboBox LanguageBox;
342 | private System.Windows.Forms.Label LanguageText;
343 | private System.Windows.Forms.Label VideoText;
344 | private System.Windows.Forms.ComboBox VideoForceMode;
345 | private System.Windows.Forms.ComboBox VideoTypeMode;
346 | private System.Windows.Forms.TrackBar VideoWidth;
347 | private System.Windows.Forms.Label VideoWidthText;
348 | private System.Windows.Forms.Label WidthNumber;
349 | private System.Windows.Forms.Label MemcardText;
350 | private System.Windows.Forms.ComboBox MemcardBlocks;
351 | private System.Windows.Forms.CheckBox MemcardMulti;
352 | private System.Windows.Forms.CheckedListBox NintendontOptions;
353 | private System.Windows.Forms.LinkLabel Format;
354 | }
355 | }
--------------------------------------------------------------------------------
/TeconMoon's WiiVC Injector/Form2.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.ComponentModel;
4 | using System.Data;
5 | using System.Drawing;
6 | using System.Linq;
7 | using System.Text;
8 | using System.Threading.Tasks;
9 | using System.Windows.Forms;
10 | using System.IO;
11 | using System.Net;
12 | using System.Diagnostics;
13 | using TeconMoon_s_WiiVC_Injector.Utils;
14 |
15 | namespace TeconMoon_s_WiiVC_Injector
16 | {
17 | public partial class SDCardMenu : Form
18 | {
19 | public SDCardMenu()
20 | {
21 | InitializeComponent();
22 |
23 | if (Trt.IsValidate)
24 | {
25 | Trt.TranslateForm(this);
26 | }
27 | }
28 | string SelectedDriveLetter;
29 | bool DriveSpecified;
30 |
31 | //Load Drives and set drive variable on load
32 | private void SDCardMenu_Load(object sender, EventArgs e)
33 | {
34 | ReloadDriveList();
35 | SpecifyDrive();
36 | MemcardBlocks.SelectedIndex = 0;
37 | VideoForceMode.SelectedIndex = 0;
38 | VideoTypeMode.SelectedIndex = 0;
39 | LanguageBox.SelectedIndex = 0;
40 | NintendontOptions.SetItemChecked(9, true);
41 | }
42 |
43 | //Callable voids for commands
44 | public void SpecifyDrive()
45 | {
46 | if (DriveBox.SelectedValue != null)
47 | {
48 | SelectedDriveLetter = DriveBox.SelectedValue.ToString().Substring(0, 3);
49 | DriveSpecified = true;
50 | }
51 | else
52 | {
53 | SelectedDriveLetter = "";
54 | DriveSpecified = false;
55 | }
56 | }
57 | public void ReloadDriveList()
58 | {
59 | DriveBox.DataSource = DriveInfo.GetDrives().Where(d => d.IsReady && d.DriveType == DriveType.Removable).Select(d => d.Name + " (" + d.VolumeLabel + ")").ToList();
60 | }
61 | public void CheckForBoxes()
62 | {
63 | if (NintendontOptions.GetItemChecked(1))
64 | {
65 | MemcardText.Enabled = true;
66 | MemcardBlocks.Enabled = true;
67 | MemcardMulti.Enabled = true;
68 | }
69 | else
70 | {
71 | MemcardText.Enabled = false;
72 | MemcardBlocks.Enabled = false;
73 | MemcardMulti.Checked = false;
74 | MemcardMulti.Enabled = false;
75 | }
76 | if (NintendontOptions.GetItemChecked(9))
77 | {
78 | VideoWidth.Enabled = false;
79 | VideoWidthText.Enabled = false;
80 | WidthNumber.Text = Trt.Tr("Auto");
81 | }
82 | else
83 | {
84 | VideoWidth.Enabled = true;
85 | VideoWidthText.Enabled = true;
86 | WidthNumber.Text = VideoWidth.Value.ToString();
87 | }
88 | }
89 | public static byte[] StringToByteArray(string hex)
90 | {
91 | return Enumerable.Range(0, hex.Length).Where(x => x % 2 == 0).Select(x => Convert.ToByte(hex.Substring(x, 2), 16)).ToArray();
92 | }
93 | public static bool CheckForInternetConnection()
94 | {
95 | try
96 | {
97 | using (var client = new WebClient())
98 | {
99 | using (client.OpenRead("http://clients3.google.com/generate_204"))
100 | {
101 | return true;
102 | }
103 | }
104 | }
105 | catch
106 | {
107 | return false;
108 | }
109 | }
110 |
111 | //Reload Drives when selected
112 | private void ReloadDrives_Click(object sender, EventArgs e)
113 | {
114 | ReloadDriveList();
115 | SpecifyDrive();
116 | }
117 | //Specify Drive variable when a drive is selected
118 | private void DriveBox_SelectedIndexChanged(object sender, EventArgs e)
119 | {
120 | SpecifyDrive();
121 | }
122 |
123 |
124 | //Changing config options
125 | public void NintendontOptions_SelectedIndexChanged(object sender, EventArgs e)
126 | {
127 | CheckForBoxes();
128 | }
129 | private void NintendontOptions_DoubleClick(object sender, EventArgs e)
130 | {
131 | CheckForBoxes();
132 | }
133 | private void VideoForceMode_SelectedIndexChanged(object sender, EventArgs e)
134 | {
135 | if (VideoForceMode.SelectedIndex == 0)
136 | {
137 | VideoTypeMode.SelectedIndex = 0;
138 | VideoTypeMode.Enabled = false;
139 | }
140 | else if (VideoForceMode.SelectedIndex == 3)
141 | {
142 | VideoTypeMode.SelectedIndex = 0;
143 | VideoTypeMode.Enabled = false;
144 | }
145 | else
146 | {
147 | VideoTypeMode.SelectedIndex = 1;
148 | VideoTypeMode.Enabled = true;
149 | }
150 | }
151 | private void VideoWidth_Scroll(object sender, EventArgs e)
152 | {
153 | WidthNumber.Text = VideoWidth.Value.ToString();
154 | }
155 | private void VideoTypeMode_SelectedIndexChanged(object sender, EventArgs e)
156 | {
157 | if (VideoForceMode.SelectedIndex != 0 & VideoForceMode.SelectedIndex != 3 & VideoTypeMode.SelectedIndex == 0)
158 | {
159 | VideoTypeMode.SelectedIndex = 1;
160 | }
161 | }
162 |
163 | //Buttons that make changes to SD Card
164 | private void NintendontUpdate_Click(object sender, EventArgs e)
165 | {
166 | if (DriveSpecified)
167 | {
168 | if (CheckForInternetConnection() == false)
169 | {
170 | DialogResult dialogResult = MessageBox.Show(
171 | Trt.Tr("Your internet connection could not be verified, do you wish to try and download Nintendont anyways?"),
172 | Trt.Tr("Internet Connection Verification Failed"), MessageBoxButtons.YesNo);
173 | if (dialogResult == DialogResult.No)
174 | {
175 | goto skipnintendontdownload;
176 | }
177 | }
178 | ActionStatus.Text = Trt.Tr("Downloading...");
179 | ActionStatus.Refresh();
180 | Directory.CreateDirectory(SelectedDriveLetter + "apps\\nintendont");
181 | var client = new WebClient();
182 | client.DownloadFile("https://raw.githubusercontent.com/FIX94/Nintendont/master/loader/loader.dol", SelectedDriveLetter + "apps\\nintendont\\boot.dol");
183 | client.DownloadFile("https://raw.githubusercontent.com/FIX94/Nintendont/master/nintendont/meta.xml", SelectedDriveLetter + "apps\\nintendont\\meta.xml");
184 | client.DownloadFile("https://raw.githubusercontent.com/FIX94/Nintendont/master/nintendont/icon.png", SelectedDriveLetter + "apps\\nintendont\\icon.png");
185 | ActionStatus.Text = "";
186 | MessageBox.Show(Trt.Tr("Download complete."));
187 | }
188 | else
189 | {
190 | MessageBox.Show(Trt.Tr("Drive not specified, nowhere to download contents"));
191 | }
192 | skipnintendontdownload:;
193 | }
194 | private void GenerateConfig_Click(object sender, EventArgs e)
195 | {
196 | if (DriveSpecified == false)
197 | {
198 | MessageBox.Show(Trt.Tr("Drive not specified, nowhere to place generated config"));
199 | goto SkipGeneration;
200 | }
201 | int DecOffset09 = 0;
202 | int DecOffset0A_0C = 0;
203 | int DecOffset0D = 0;
204 | int DecOffset0F = 0;
205 | uint DecOffset10_13 = 0;
206 | int DecOffset21C = 0;
207 | int DecOffset21D = 0;
208 | string HexOffset09;
209 | string HexOffset0A_0C;
210 | string HexOffset0D;
211 | string HexOffset0F;
212 | string HexOffset10_13;
213 | string HexOffset21C;
214 | string HexOffset21D;
215 |
216 | //09 Offsets
217 | //TRI Arcade Mode
218 | if (NintendontOptions.GetItemChecked(11))
219 | {
220 | DecOffset09 = DecOffset09 + 1;
221 | }
222 | //Wiimote CC Rumble
223 | if (NintendontOptions.GetItemChecked(12))
224 | {
225 | DecOffset09 = DecOffset09 + 2;
226 | }
227 | //Skip IPL
228 | if (NintendontOptions.GetItemChecked(13))
229 | {
230 | DecOffset09 = DecOffset09 + 4;
231 | }
232 | //convert to hex string
233 | HexOffset09 = DecOffset09.ToString("X");
234 | HexOffset09 = HexOffset09.PadLeft(2, '0');
235 |
236 | //0A-0C Offsets
237 | //Cheats
238 | if (NintendontOptions.GetItemChecked(0))
239 | {
240 | DecOffset0A_0C = DecOffset0A_0C + 256;
241 | }
242 | //Memcard Emu
243 | if (NintendontOptions.GetItemChecked(1))
244 | {
245 | DecOffset0A_0C = DecOffset0A_0C + 2049;
246 | }
247 | //Memcard Multi
248 | if (MemcardMulti.Checked)
249 | {
250 | DecOffset0A_0C = DecOffset0A_0C + 2097152;
251 | }
252 | //Cheat Path
253 | if (NintendontOptions.GetItemChecked(2))
254 | {
255 | DecOffset0A_0C = DecOffset0A_0C + 4097;
256 | }
257 | //Force Widescreen
258 | if (NintendontOptions.GetItemChecked(3))
259 | {
260 | DecOffset0A_0C = DecOffset0A_0C + 8193;
261 | }
262 | //Force Progressive
263 | if (NintendontOptions.GetItemChecked(4))
264 | {
265 | DecOffset0A_0C = DecOffset0A_0C + 16387;
266 | }
267 | //Unlock Read Speed
268 | if (NintendontOptions.GetItemChecked(5))
269 | {
270 | DecOffset0A_0C = DecOffset0A_0C + 65540;
271 | }
272 | //OSReport
273 | if (NintendontOptions.GetItemChecked(6))
274 | {
275 | DecOffset0A_0C = DecOffset0A_0C + 131076;
276 | }
277 | //WiiU Widescreen
278 | if (NintendontOptions.GetItemChecked(7))
279 | {
280 | DecOffset0A_0C = DecOffset0A_0C + 8388612;
281 | }
282 | //Log
283 | if (NintendontOptions.GetItemChecked(8))
284 | {
285 | DecOffset0A_0C = DecOffset0A_0C + 1048594;
286 | }
287 | //convert to hex string
288 | HexOffset0A_0C = DecOffset0A_0C.ToString("X");
289 | HexOffset0A_0C = HexOffset0A_0C.PadLeft(6, '0');
290 |
291 | //0D Offsets
292 | //Video Force Options
293 | //Auto
294 | if (VideoForceMode.SelectedIndex == 0)
295 | {
296 | DecOffset0D = 0;
297 | }
298 | //Force
299 | if (VideoForceMode.SelectedIndex == 1)
300 | {
301 | DecOffset0D = 1;
302 | }
303 | //Force (Deflicker)
304 | if (VideoForceMode.SelectedIndex == 2)
305 | {
306 | DecOffset0D = 5;
307 | }
308 | //None
309 | if (VideoForceMode.SelectedIndex == 3)
310 | {
311 | DecOffset0D = 2;
312 | }
313 | //convert to hex string
314 | HexOffset0D = DecOffset0D.ToString("X");
315 | HexOffset0D = HexOffset0D.PadLeft(2, '0');
316 |
317 | //0F Offsets
318 | //Video Mode Options
319 | //None
320 | if (VideoTypeMode.SelectedIndex == 0)
321 | {
322 | DecOffset0F = 16;
323 | }
324 | //NTSC
325 | if (VideoTypeMode.SelectedIndex == 1)
326 | {
327 | DecOffset0F = 20;
328 | }
329 | //MPAL
330 | if (VideoTypeMode.SelectedIndex == 2)
331 | {
332 | DecOffset0F = 24;
333 | }
334 | //PAL50
335 | if (VideoTypeMode.SelectedIndex == 3)
336 | {
337 | DecOffset0F = 17;
338 | }
339 | //PAL60
340 | if (VideoTypeMode.SelectedIndex == 4)
341 | {
342 | DecOffset0F = 18;
343 | }
344 | //Patch PAL50
345 | if (NintendontOptions.GetItemChecked(10))
346 | {
347 | DecOffset0F = DecOffset0F + 32;
348 | }
349 | //convert to hex string
350 | HexOffset0F = DecOffset0F.ToString("X");
351 | HexOffset0F = HexOffset0F.PadLeft(2, '0');
352 |
353 | //10-13 Offsets
354 | //Language Selection
355 | //Automatic
356 | if (LanguageBox.SelectedIndex == 0)
357 | {
358 | DecOffset10_13 = 4294967295;
359 | }
360 | //English
361 | if (LanguageBox.SelectedIndex == 1)
362 | {
363 | DecOffset10_13 = 0;
364 | }
365 | //German
366 | if (LanguageBox.SelectedIndex == 2)
367 | {
368 | DecOffset10_13 = 1;
369 | }
370 | //French
371 | if (LanguageBox.SelectedIndex == 3)
372 | {
373 | DecOffset10_13 = 2;
374 | }
375 | //Spanish
376 | if (LanguageBox.SelectedIndex == 4)
377 | {
378 | DecOffset10_13 = 3;
379 | }
380 | //Italian
381 | if (LanguageBox.SelectedIndex == 5)
382 | {
383 | DecOffset10_13 = 4;
384 | }
385 | //Dutch
386 | if (LanguageBox.SelectedIndex == 6)
387 | {
388 | DecOffset10_13 = 5;
389 | }
390 | //convert to hex string
391 | HexOffset10_13 = DecOffset10_13.ToString("X");
392 | HexOffset10_13 = HexOffset10_13.PadLeft(8, '0');
393 |
394 | //21C Offsets
395 | //Memcard Blocks
396 | //59
397 | if (MemcardBlocks.SelectedIndex == 0)
398 | {
399 | DecOffset21C = 0;
400 | }
401 | //123
402 | if (MemcardBlocks.SelectedIndex == 1)
403 | {
404 | DecOffset21C = 1;
405 | }
406 | //251
407 | if (MemcardBlocks.SelectedIndex == 2)
408 | {
409 | DecOffset21C = 2;
410 | }
411 | //507
412 | if (MemcardBlocks.SelectedIndex == 3)
413 | {
414 | DecOffset21C = 3;
415 | }
416 | //1019
417 | if (MemcardBlocks.SelectedIndex == 4)
418 | {
419 | DecOffset21C = 4;
420 | }
421 | //2043
422 | if (MemcardBlocks.SelectedIndex == 5)
423 | {
424 | DecOffset21C = 5;
425 | }
426 | //convert to hex string
427 | HexOffset21C = DecOffset21C.ToString("X");
428 | HexOffset21C = HexOffset21C.PadLeft(2, '0');
429 |
430 | //21D Offsets
431 | //Video Width
432 | if (NintendontOptions.GetItemChecked(9))
433 | {
434 | DecOffset21D = 0;
435 | }
436 | else
437 | {
438 | DecOffset21D = VideoWidth.Value - 600;
439 | }
440 | //convert to hex string
441 | HexOffset21D = DecOffset21D.ToString("X");
442 | HexOffset21D = HexOffset21D.PadLeft(2, '0');
443 |
444 | //Output Hex File
445 | string config = "01070CF60000000800" + HexOffset09 + HexOffset0A_0C + HexOffset0D + "00" + HexOffset0F + HexOffset10_13 + "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + HexOffset21C + HexOffset21D + "0000";
446 | File.WriteAllBytes(SelectedDriveLetter + "nincfg.bin", StringToByteArray(config));
447 |
448 | MessageBox.Show(Trt.Tr("Config generation complete."));
449 | SkipGeneration:;
450 | }
451 |
452 | private void Format_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
453 | {
454 | Process.Start("http://www.ridgecrop.demon.co.uk/index.htm?guiformat.htm");
455 | Process.Start("http://www.ridgecrop.demon.co.uk/guiformat.exe");
456 | }
457 | }
458 | }
459 |
--------------------------------------------------------------------------------
/TeconMoon's WiiVC Injector/Form2.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 |
122 |
123 | AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
124 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
125 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiQAAAAAAAABw
126 | AAMEjQE9BI8A2ACDAOsBfQBQAHwACAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
127 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
128 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
129 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
130 | AAAU/wAAAAAAAAOIACMAlwDGAZoA/QGbAP8AgwD/AIQA/wCDANMAfwA2AAAAAAAAAAAAAAAAAAAAAAAA
131 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
132 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
133 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
134 | AAAAAAAAAAAAAAAAAAAAAAAAAZMAFwKZAIsAngD/AaAA/wCfAP8EnwD/AIUA/wCIAP8AiAD/AYkA/wCI
135 | AJ0AiQAcAAAAAAAAAAAAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
136 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
137 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
138 | AAAAAAAAAAAAAAAAAAAAAAAAAJgAAAAAAAAAAAAAAJwAggClAOwApgD/AKcA/wCkAP8BpAD/BKIA/wCH
139 | AP8AiwD/AIoA/wCMAP8AjgD/AI8A7wCOAIkAAAAAAAAAAACJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
140 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
141 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
142 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoQAAAAAAAAB5AAIAnwA7AKUA3ACsAP8ArQD/AKsA/wCr
143 | AP8AqAD/AKgA/wKmAP8AigD/AI0A/wCOAP8AjwD/AJEA/wCTAP8AlAD/AJMA3wCQADsAaAABAAAAAACX
144 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
145 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
146 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmwAAAAAAAACZACkApQDJAKkA/gCr
147 | AP8AsAD/ALEA/wCuAP8ArgD/AKwA/wCrAP8CqgD/AI0A/wCQAP8AkQD/AJMA/wCUAP8AlgD/AJYA/wCZ
148 | AP8AmAD+AJgAxQCPACAAAAAAAJcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
149 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
150 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZcAAAAAAAAAAAAAAJwAFQCf
151 | AIQApAD/AKYA/wCsAP8ArwD/ALQA/wC1AP8AtQD/ALIA/wCwAP8AsAD/Aa8A/wCQAP8AkgD/AJQA/wCV
152 | AP8AlgD/AJoA/wCcAP8AnAD/AJ0A/wCeAP8AnwD/AJsAdwCcABEAAAAAAKEAAACZAAAAAAAAAAAAAAAA
153 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
154 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIoAAAAA
155 | AAAAAAAAAJsAegCeAOoAogD/AKQA/wCpAP8ArwD/ALMA/wC4AP8AugD/ALgA/wC4AP8AtQD/AbQA/wa0
156 | AP8AkgD/AJUA/wCWAP8AmAD/AJsA/wCcAP8AngD/AKAA/wChAP8AowD/AKQA/wCjAP8ApADjAJ4AYgAA
157 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
158 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
159 | AAAAjwAAAAAAAASLAAMAlgA7AJoA4QCcAP8AoAD/AKQA/wCoAP8ArgD/ALMA/wC5AP8AvgD/AL0A/wC+
160 | AP8AugD/ALkA/wC3AP8CuQD/AJMA/wCXAP8AmQD/AJsA/wCdAP8AnwD/AKIA/wCkAP8ApQD/AKUA/wCn
161 | AP8ApgD/AKgA/wCoAP8ApQDJAKMALAAAAAAAAAAAAJoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
162 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
163 | AAAAAAAAAAAAAAAAAAAA/wAAAAAAAACQACEAlQDFAJcA/QCaAP8AngD/AKMA/wCoAP8ArAD/ALIA/wC4
164 | AP8AvgD/AMMA/wDBAP8AwwD/AMAA/wC/AP8AvQD/ALoA/wCTAP8AmAD/AJsA/wCdAP8AnwD/AKMA/wCl
165 | AP8AqAD/AKkA/wCpAP8AqwD/AKoA/wCtAP8ArAD/AKoA/wCsAPcAqQCuAIgACAAAAAAApgAAAAAAAAAA
166 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
167 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIkAFgCQAIgAkwD/AJYA/wCYAP8AnQD/AKIA/wCn
168 | AP8AqwD/ALEA/wC3AP8AvQD/AMMA/wDIAP8AxwD/AMgA/wDFAP8AwgD/GbwW/1G5SPpyrGX2Jpwk/wGb
169 | Af8AnwD/AKIA/wCmAP8ApwD/AKoA/wCsAP8ArgD/AK8A/wCwAP8AsQD/ALAA/wCvAP8AsAD/AK8A/wCs
170 | AP0ApwBcAJoACAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
171 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIYAAAAAAAAAAAAAAIkAfgCOAOsAkAD/AJMA/wCY
172 | AP8AnAD/AKAA/wCmAP8AqwD/ALAA/wC2AP8AvAD/AMEA/wDIAP8AzAD/AMwA/wDPAP8DwAP/crhu/3Oe
173 | b+FziF84ZWdiL2uMaNN3tGv/EJwQ/wCjAP8AqAD/AKoA/wCtAP8ArwD/ALEA/wCyAP8AtAD/ALYA/wCz
174 | AP8AtQD/ALQA/wCzAP8AsQD/AK4A/wCxAN0ApQBHAAAAAACtAAAAmwAAAAAAAAAAAAAAAAAAAAAAAAAA
175 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAACGAAEAhAA5AIgA2QCM
176 | AP8AjwD/AJIA/wCXAP8AmwD/AJ8A/wCkAP8AqgD/AK8A/wC0AP8AuwD/AMEA/wDIAP8AzgD/ANIA/wfJ
177 | B/9EtUT/nqih6XN/c3kAAAAAAAAAAAAAAAAAAAAAYV1fbJ6sl+ZSpFH/DKUM/wCrAP8AsAD/ALIA/wC1
178 | AP8AtwD/ALgA/wC5AP8AuAD/ALgA/wC5AP8AtwD/ALYA/wC1AP8AtAD/ALIA/wCrAKEAqQAcAAAAAAAA
179 | AAAAnQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAB3
180 | ACUAgQDGAIYA/gCJAP8AjQD/AJEA/wCVAP8AmgD/AJ8A/wCjAP8AqAD/AK4A/wCzAP8AugD/AL8A/wDF
181 | AP8AzwD/AMoA/z25QP+PrpD/g4eBgXN5axQAAAAAAAAAAFErSQBYRGAAZ3lOAAAAAABYU04Sen53e4+q
182 | j/9Oq07/AKkA/wC1AP8AtwD/ALoA/wC7AP8AvQD/AL0A/wC+AP8AvAD/ALwA/wC6AP8AuQD/ALkA/wC2
183 | AP8AsgD/AK0A8QCmAI0AAAAAAAAAAACVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ6
184 | AAAAAAAAAHcAFAB7AIEAgQD/AIQA/wCIAP8AiwD/AJAA/wCUAP8AmQD/AJ0A/wCiAP8ApwD/AK0A/wCz
185 | AP8AuAD/AMAA/wDFAP8AxgD/GLoW/3OvcP6XnJHHNkMuJQAAAABZWU8AAAAAAAAAAAAAAAAAAAAAAAAA
186 | AAAAAAAATEpNAAAAAAAqERgijpmJxoKrev4cqB3/ALQB/wC9AP8AvgD/AMAA/wDAAP8AwQD/AMAA/wC/
187 | AP8AvgD/AL4A/wC+AP8AuwD/ALgA/wCyAP8ArAD/AKcA6wCiAEIAjwAEAAAAAACYAAAAAAAAAAAAAAAA
188 | AAAAAAAAAAAAAAAAAAAAAAAAAXoAbAB9AOkAgAD/AIIA/wCGAP8AiQD/AI4A/wCSAP8AlgD/AJwA/wCg
189 | AP8ApgD/AKsA/wCxAP8AtwD/AL4A/wDEAP8Gsgf/arll/4Gicth4gGw4AAAAAQAAAABld2IAAAAAAAAA
190 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABdV04AAAAAAAAAAAF1b2s6YptZ20fENP8IrAn/AL0A/wDE
191 | AP8AwwD/AMMA/wDEAP8AwwD/AMIA/wDBAP8AwQD/AL8A/wC5AP8AtQD/ALEA/wCrAP8ApgD/AKIAyACc
192 | ACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF9AOoAfwD/AIIA/wCEAP8AiAD/AIwA/wCR
193 | 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
221 | AAAAAAAAcTZoAAAAAAACuwneAMEA/wDSAP8AzQD/AMkA/wDCAP8AvwD/ALgA/wCzAP8ApgCzAAAAAAAA
222 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABjQDhAI0A/wCRAP8AlAD/AJoA/wCfAP8ApAD/AKsA/wCm
223 | AP8ArQDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC9IBjAHgAPAA4gD/AOIA/wDhAP8A4AD/AN8A/wDf
224 | AP8A3gD/Ad0A/wTdAP8O3AD/ANMA/wDgAP8A4gD/AOMA/wDkAP8A5gD/AOUA/wDmAP8A5gD/AOYA/wDk
225 | AO4A3AGCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbsF3ADCAP8A0wD/AM4A/wDKAP8AxgD/AMAA/wC6
226 | AP8AtAD/AKcAswAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAA4QCQAP8AkgD/AJcA/wCc
227 | AP8AogD/AKgA/wCvAP8AqQD/AK0A4AAAAAAAAAAAAAAAAAAAAAAMrgAOAtYA4ADjAP8A4wD/AOIA/wDh
228 | AP8A4QD/AOAA/wDfAP8A3gD/AN4A/wLdAP8E3AD/FdwG/wDWAP8A4wD/AOMA/wDlAP8A5QD/AOUA/wDm
229 | AP8A5gD/AOUA/wDlAP8A5gD/AOYA/wHeAtoUrxYPAAAAAAAAAAAAAAAAAAAAAAG8ANsAwwD/ANUA/wDP
230 | AP8AywD/AMYA/wDBAP8AvAD/ALgA/wCnALIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACS
231 | AOEAkQD/AJQA/wCaAP8AnwD/AKUA/wCqAP8AswD/AKsA/wCtAOAAAAAAAAAAAAAAAAAAAAAABq0AGAHZ
232 | AOkA4gD/AOIA/wDiAP8A4QD/AOEA/wDfAP8A3wD/AN4A/wHeAP8C3QD/AtwA/xnbCf8A1wD/AOUA/wDl
233 | AP8A5QD/AOUA/wDlAP8A5gD/AOUA/wDlAP8A5QD/AOUA/wDmAP8A4QPtAbwYGwAAAAAAAAAAAAAAAAAA
234 | AAABvAPZAMMA/wDWAP8A0AD/AMkA/wDHAP8AwQD/AL0A/wC4AP8AqACyAAAAAAAAAAAAAAAAAAAAAAAA
235 | AAAAAAAAAAAAAAAAAAAAlADhAJMA/wCXAP8AnAD/AKIA/wCoAP8ArQD/ALUA/wCuAP8ArADgAAAAAAAA
236 | AAAAAAAAAAAAAA2sABcB2gDpAOIA/wDiAP8A4gD/AOEA/wDhAP8A3wD/AN4A/wDeAP8D3QD/A9wA/wXc
237 | AP8b2wv/ANkA/wDlAP8A5gD/AOUA/wDlAP8A5QD/AOUA/wDlAP8A5QD/AOYA/wDlAP8A5gD/AOAD7AC8
238 | GhsAAAAAAAAAAAAAAAAAAAAAAb0C1wDDAP8A1wD/ANEA/wDMAP8AxwD/AMEA/wC9AP8AuAD/AagAsgAA
239 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZYA4QCWAP8AmAD/AJ4A/wCkAP8AqgD/ALEA/wC4
240 | AP8AsAD/AK0A4AAAAAAAAAAAAAAAAAAAAAAIrgAYAdsA6QDiAP8A4gD/AOEA/wDhAP8A4AD/AN8A/wDe
241 | AP8B3gD/Ad0A/wLcAP8B3AD/GNsK/wDcAP8A5QD/AOUA/wDmAP8A5gD/AOUA/wDmAP8A5QD/AOUA/wDm
242 | AP8A5gD/AOUA/wDgBO0AsyEcAAAAAAAAAAAAAAAAAAAAAAK8ANUAxAD/ANYA/wDRAP8AzQD/AMcA/wDB
243 | AP8AvgD/ALgA/wCpALIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGYAOEAlwD/AJsA/wCh
244 | AP8ApgD/AKwA/wCzAP8AugD/ALIA/wCtAOAAAAAAAAAAAAAAAAAAAAAAD60DGALcAOkA4gD/AOIA/wDh
245 | AP8A4QD/AOAA/wDfAP8A3wD/Ad4A/wDdAP8B3AD/A9wA/xHbAf8A3gD/AOUA/wDlAP8A5QD/AOUA/wDl
246 | AP8A5QD/AOUA/wDlAP8A5gD/AOYA/wDlAP8A3wTtAKsnGgDoAAAAqx0AAAAAAAAAAAACvADVAMUA/wDV
247 | AP8A0QD/AM0A/wDIAP8AwwD/AL4A/wC4AP8BqgCyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
248 | AAAAmgDhAJkA/wCdAP8AogD/AKkA/wCuAP8AtQD/AL0A/wC0AP8ArADgAAAAAAAAAAAAAAAAAAAAABOr
249 | EBgC2wLpAOIA/wDiAP8A4QD/AOAA/wDgAP8A3wD/AN4A/wDeAP8A3gD/Ad0A/wHdAP8L3AD/AN8A/wDl
250 | AP8A5QD/AOUA/wDmAP8A5QD/AOUA/wDmAP8A5QD/AOUA/wDlAP8A5QD/AOIC+gDVBl8AAAAAAAAAAAAA
251 | AAAAAAAAArwA0wDEAP8A1QD/ANAA/wDMAP8AyAD/AMIA/wC9AP8AuAD/AKgAsQAAAAAAAAAAAAAAAAAA
252 | AAAAAAAAAAAAAAAAAAAAAAAAAJwA4QCbAP8AngD/AKUA/wCqAP8AsAD/ALgA/wC/AP8AtgD/AKoA4AAA
253 | AAAAAAAAAAAAAAAAAAAVqRQYAtsC6gDiAP8A4gD/AOEA/wDhAP8A4AD/AN8A/wDfAP8A3gD/AN4A/wDe
254 | AP8A3QD/CdwA/wDgAP8A5QD/AOUA/wDlAP8A5QD/AOYA/wDmAP8A5QD/AOYA/wDlAP8A5QD/AOQA/wDk
255 | AP8A4wD/AN4BwADYACkAAAAAAAAAAAC6ANEAxAD/ANQA/wDPAP8AywD/AMYA/wDDAP8AvQD/ALkA/wGn
256 | ALEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfAOEAnQD/AKAA/wCmAP8ArQD/ALIA/wC6
257 | AP8AwQD/ALgA/wCqAOAAAAAAAAAAAAAAAAAAAAAAFacPGQLbAuoA4gD/AOIA/wDiAP8A4QD/AOAA/wDf
258 | AP8A3wD/AN4A/wDeAP8A3gD/AN4A/wDfAP8A2AD/AOYA/wDlAP8A5QD/AOUA/wDlAP8A5gD/AOUA/wDl
259 | AP8A5AD/AOQA/wDjAP8A4gD/AOAA/wDfAP8A3gD1ANwApwAAAAABugDOAMMA/wDTAP8AzwD/AMoA/wDG
260 | AP8AwgD/AL4A/wC5AP8ApwCxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoADgAJ8A/wCi
261 | AP8AqAD/AK0A/wC0AP8AvAD/AMMA/wC5AP8AqQDgAAAAAAAAAAAAAAAAAAAAABCoHRkC3APqAOIA/wDi
262 | AP8A4gD/AOEA/wDgAP8A3wD/AN8A/wDeAP8A3gD/AN4A/yDbIf+Wy5X/tMKz/zDOL/8C4AL/AOYA/wDl
263 | AP8A5QD/AOYA/wDkAP8A5AD/AOIA/wDhAP8A4AD/AN8A/wDdAP8A3AD/ANoA/wDZAP8A2wDxAMYB5gDA
264 | AP8A0AD/AMwA/wDJAP8AxQD/AMEA/wC9AP8AuQD/AKcAsQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
265 | AAAAAAAAAKAA4AChAP8ApAD/AKoA/wCvAP8AtgD/AL0A/wDEAP8AugD/AacA4AAAAAAAAAAAAAAAAAAA
266 | AAASqBMZAtwC6gDjAP8A4gD/AOIA/wDhAP8A4QD/AOAA/wDfAP8A3wD/B94H/4bNhv+9xb3/x8XH/8XE
267 | xf/ExMP/l8SW/xbKFf8A5wD/AOYA/wDlAP8A4gD/AOEA/wDgAP8A3gD/AN0A/wDdAP8A2wD/ANgA/wDZ
268 | AP8A1gD/ANQA/wDTAP8AygD/AM0A/wDKAP8AxwD/AMMA/wDAAP8AuwD/ALgA/wCmALEAAAAAAAAAAAAA
269 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACiAOAAowD/AKUA/wCqAP8AsAD/ALgA/wC+AP8AxQD/ALsA/wCl
270 | AOAAAAAAAAAAAAAAAAAAAAAABa8JGQHdAeoA4wD/AOIA/wDiAP8A4QD/AOEA/wDgAP8I3wj/TdVN/8bF
271 | xf/Ixcj/xcXF/8XFxf/FxcX/xcXF/8bFxv/Oxs7/YL5e/w3YDf8A4gD/AOAA/wDeAP8A3QD/ANsA/wDa
272 | AP8A2QD/ANgA/wDWAP8A1AD/ANQA/wDRAP8AzgD/AM4A/wDLAP8AyAD/AMUA/wDBAP8AvgD/ALoA/wC2
273 | AP8ApQCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAowDgAKQA/wCmAP8ArAD/ALEA/wC5
274 | AP8AvwD/AMYA/wC8AP8AowDgAAAAAAAAAAAAAAAAAAAAAACuAhkA3QDqAOMA/wDjAP8A4gD/AOIA/wDi
275 | AP9A1ED/rsiu/8fFx//FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8fFx/+yw7L/VcNU/wDV
276 | AP8A3QD/ANoA/wDYAP8A1wD/ANUA/wDVAP8A0wD/ANEA/wDRAP8AzgD/AMwA/wDJAP8AxwD/AMUA/wDD
277 | AP8AwAD/ALwA/wC4AP8AtQD/AKQAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKMA4ACk
278 | AP8ApwD/AKwA/wCzAP8AuQD/AL8A/wDIAP8AvAD/AaMA4AAAAAAAAAAAAAAAAAAAAAAAuAEZAN4A6wDj
279 | AP8A4wD/AOEA/xnbGf+JyYn/y8PL/8XFxf/ExMT/xMTE/8XFxf/FxcX/xMTE/8TExP/ExMT/xMTE/8TE
280 | xP/ExMT/xMTE/8vFy/+ZvJn/IMQe/wDTAP8A1wD/ANMA/wDSAP8A0gD/ANAA/wDOAP8AywD/AMwA/wDJ
281 | AP8AxgD/AMQA/wDDAP8AwQD/AL4A/wC6AP8AtwD/ALIA/wCkALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
282 | AAAAAAAAAAAAAAClAOAApQD/AKgA/wCuAP8AtAD/ALoA/wDAAP8AyAD/ALwA/wGgAOAAAAAAAAAAAAAA
283 | AAAAAAAAAbgBGgDeAOsA5QD/AtsB/3zLe/++xL7/yMXI/8TExP/ExMT/xMTE/8XFxf/ExMT/xcXF/8XF
284 | xf/ExMT/xMTE/8XFxf/FxcX/xcXF/8TExP/ExMT/xsXG/8DDwP+Ev4P/BrwE/wDRAP8AzgD/AMwA/wDM
285 | AP8AywD/AMkA/wDIAP8AxgD/AMQA/wDCAP8AwAD/AL4A/wC8AP8AuAD/ALQA/wCxAP8AowCwAAAAAAAA
286 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABogDgAKYA/wCpAP8ArgD/ALQA/wC5AP8AwQD/AMgA/wC8
287 | AP8AoADgAAAAAAAAAAAAAAAAAAAAAAHAAxoL3gvsQdBA/77Evv/HxMj/xcXF/8XFxf/ExMT/xMTE/8TE
288 | xP/ExMT/xcXF/8TExP/ExMT/xMTE/8TExP/FxcX/xcXF/8TExP/ExMT/xMTE/8TExP/ExMT/x8XH/8PD
289 | w/9EtEL/CMQI/wDKAP8AxwD/AMcA/wDGAP8AxAD/AMMA/wDCAP8AvwD/AL4A/wC7AP8AuAD/ALUA/wCx
290 | AP8ArgD/AKAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKMA4ACmAP8AqQD/AK4A/wC0
291 | AP8AugD/AMEA/wDHAP8AuwD/AZ4A4AAAAAAAAAAAAAAAAAAAAAAyYj0Kc410vsXDxf/Hxsf/xcXF/8XF
292 | xf/FxcX/xcXF/8TExP/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF
293 | xf/ExMT/xcXF/8XFxf/Gxcb/yMfI/5y5m/8ysTH/ALwA/wDFAP8AwgD/AMEA/wC/AP8AvwD/AL0A/wC7
294 | AP8AuAD/ALYA/wCzAP8ArgD/AKsA/wCgAK4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACj
295 | AOAApwD/AKoA/wCvAP8AtAD/ALoA/wDBAP8AxgD/ALoA/wCdAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
296 | AABRX1BdrLGq4b7Bvv/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF
297 | xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8bFxv/CxMP/t7u253yJgG5LQklGq6yq2nascv8Yshf/ALwA/wC/
298 | AP8AvAD/ALwA/wC6AP8AtwD/ALUA/wCyAP8ArwD/AK0A/wCqAP8AnwCuAAAAAAAAAAAAAAAAAAAAAAAA
299 | AAAAAAAAAAAAAAAAAAAApQDfAKYA/wCqAP8ArgD/ALQA/wC6AP8AvwD/AMYA/wC4AP8AmQDfAAAAAACR
300 | AAAAAAAAAAAAAFkyTgBMdFEAAAAAADtBNBB9gHtwqbWl/8rIyv/DxcT/v8bC/8DGwv/BxsP/wMbD/7/G
301 | wv/AxsL/wsXD/8TFxf/FxcX/xMXE/8PFxP/DxcT/w8XE/8jHyf+2vrP/iJmEfGOEZRMAAAAAAAAAAC8m
302 | KAyCfH9fi56H/W2xa/8AqQD/ALwA/wC4AP8AuAD/ALUA/wCyAP8AsAD/AK0A/wCrAP8AqAD/AJ0ArgAA
303 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaIA3wCmAP8AqgD/AK4A/wC0AP8AuQD/AL8A/wDD
304 | AP8FtQX/BJoE9QCcAC4AAAAAAAAAAACeAAAAAAAAAAAAAAAAAABOMFUAAAAAAA8ADRqJmIO+tL21/bnJ
305 | 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
375 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
376 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
377 | AAAAAAAAUklNAAAAAAAAAAAAWmtWLlSAS8o/qB3/GrcA/wfCAP8CzAD/ANMA/wDWAP8A2gD/ANsA/wDd
378 | AP8A4AD/AOEA/wDiAP8A5QD/B9UI/y2INZk+Z0QbAAAAAAAAAABZLF4AAAAAAAAAAAAAAAAAAAAAAAAA
379 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
380 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
381 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAR0VLAAAAAAAAAAAAY2NhcU2WNuksrQz/D7wA/wTI
382 | AP8A0gD/ANUA/wDYAP8A3AD/AN8A/wDiAP8F1wb/GrAc1GEjeToAAAAAS0BoAEtJSQAAAAAAAAAAAAAA
383 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
384 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
385 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
386 | AABYTlwTUnVFgkWXLf8aswH/B78A/wLLAP8A0wD/ANgA/wDbAP8gpiPqOXg/R3wAoQQAAAAAG9RgAAAA
387 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
388 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
389 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
390 | AAAAAAAAAAAAAAAAAAAAAAAAc51CAAAAAABcM2oeTIQ9xSikCP0MtwD/A8QB/wvDC+86gDiRAAAAAAAA
391 | AABYRGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
392 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
393 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
394 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABRRlcAAAAAAF4AfAM9cjI9HJgV2ySP
395 | GZNHWUwcAAAAAAAAAABjNFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
396 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
397 | AAAAAAAA////+B/////////wD////////8AD////////gAH///////wAAD//////+AAAH//////gAAAH
398 | /////8AAAAP////+AAAAAP////wAAAAAP///8AAAAAAP///gAAAAAAf//wAAA8AAAf/+AAAH4AAA//gA
399 | AB/4AAAf8AAAP/wAAA/wAAH+f4AAD/AAA/w/wAAP8AAP8A/wAA/wAB/gA/gAD/AA/wAA/wAP8AH+AAB/
400 | gA/wA/gAAB/AD/AD8AAAD8AP8APAAAADwA/wA8AAAAPAD/ADwAAAA8AP8APAAAADwA/wA8AAAAPAD/AD
401 | wAAAA8AP8APAAAAAwA/wA8AAAABAD/ADwAAAAAAP8APAAAAAAA/wA8AAAAAAD/ADwAAAAAAP8APAAAAA
402 | AA/wA8AAAAAAD/ADwAAAAAAP8APAAAAAAA/wA/AAAAAAD/AD+AAAGAAP8AH+AAB+AA/wAH+AAP+AD/AA
403 | H+AH/+AP8AAP8A/38A/wAAP8P8H8D/AAAP5/AP8P8AAAP/wAP8/4AAAf+AAP//8AAAfgAAP//4AAA4AA
404 | A///4AAAAAAH///wAAAAAA////wAAAAAf////wAAAAD/////wAAAA//////gAAAH//////gAAD//////
405 | /gAAf///////gAH////////AA/////////Af////////+D////8=
406 |
407 |
408 |
--------------------------------------------------------------------------------
/TeconMoon's WiiVC Injector/LogLevels.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using TeconMoon_s_WiiVC_Injector;
5 |
6 | namespace LogLevels
7 | {
8 | public class LogLevel : IEquatable
9 | {
10 | private static Dictionary levels = new Dictionary(){
11 | {Trt.Tr("Debug"), 1},
12 | {Trt.Tr("Info"), 2}
13 | };
14 |
15 | private LogLevel(string name)
16 | {
17 | Name = name;
18 | Level = levels[name];
19 | }
20 |
21 | public string Name { get; set; }
22 | public int Level { get; set; }
23 |
24 | public static LogLevel Debug { get { return new LogLevel(Trt.Tr("Debug")); } }
25 | public static LogLevel Info { get { return new LogLevel(Trt.Tr("Info")); } }
26 |
27 | public static LogLevel getLogLevelByName(string name)
28 | {
29 | LogLevel result = null;
30 | if(levels.ContainsKey(name))
31 | result = new LogLevel(name);
32 |
33 | return result;
34 | }
35 |
36 | public static LogLevel getLogLevelByLevel(int level)
37 | {
38 | return (from k in levels.Keys
39 | where levels[k] == level
40 | select new LogLevel(k)).DefaultIfEmpty(null).First();
41 | }
42 |
43 | public static string[] Names => levels.Keys.ToArray();
44 |
45 | public override bool Equals(object obj)
46 | {
47 | return this.Equals(obj as LogLevel);
48 | }
49 |
50 | public bool Equals(LogLevel p)
51 | {
52 | // If parameter is null, return false.
53 | if (Object.ReferenceEquals(p, null))
54 | {
55 | return false;
56 | }
57 |
58 | // Optimization for a common success case.
59 | if (Object.ReferenceEquals(this, p))
60 | {
61 | return true;
62 | }
63 |
64 | // If run-time types are not exactly the same, return false.
65 | if (this.GetType() != p.GetType())
66 | {
67 | return false;
68 | }
69 |
70 | // Return true if the fields match.
71 | // Note that the base class is not invoked because it is
72 | // System.Object, which defines Equals as reference equality.
73 | return (Level == p.Level);
74 | }
75 |
76 | public override int GetHashCode()
77 | {
78 | int hashCode = 1635173235;
79 | hashCode = hashCode * -1521134295 + EqualityComparer.Default.GetHashCode(Name);
80 | hashCode = hashCode * -1521134295 + Level.GetHashCode();
81 | return hashCode;
82 | }
83 |
84 | public static bool operator ==(LogLevel lhs, LogLevel rhs)
85 | {
86 | if (Object.ReferenceEquals(lhs, null))
87 | {
88 | if (Object.ReferenceEquals(rhs, null))
89 | {
90 | // null == null = true.
91 | return true;
92 | }
93 |
94 | // Only the left side is null.
95 | return false;
96 | }
97 |
98 | return lhs.Level.Equals(rhs.Level);
99 | }
100 |
101 | public static bool operator !=(LogLevel lhs, LogLevel rhs)
102 | {
103 | return !(lhs == rhs);
104 | }
105 |
106 | public static bool operator >(LogLevel lhs, LogLevel rhs)
107 | {
108 | if (lhs == rhs)
109 | return false;
110 |
111 | if (Object.ReferenceEquals(lhs, null))
112 | return false;
113 |
114 | if (Object.ReferenceEquals(rhs, null))
115 | return false;
116 |
117 | return lhs.Level > rhs.Level;
118 | }
119 |
120 | public static bool operator <(LogLevel lhs, LogLevel rhs)
121 | {
122 | if (lhs == rhs)
123 | return false;
124 |
125 | if (Object.ReferenceEquals(lhs, null))
126 | return false;
127 |
128 | if (Object.ReferenceEquals(rhs, null))
129 | return false;
130 |
131 |
132 | return lhs.Level < rhs.Level;
133 | }
134 |
135 | public static bool operator >=(LogLevel lhs, LogLevel rhs)
136 | {
137 | if (lhs == rhs)
138 | return true;
139 |
140 | if (Object.ReferenceEquals(lhs, null))
141 | return false;
142 |
143 | if (Object.ReferenceEquals(rhs, null))
144 | return false;
145 |
146 |
147 | return lhs.Level >= rhs.Level;
148 | }
149 |
150 | public static bool operator <=(LogLevel lhs, LogLevel rhs)
151 | {
152 | if (lhs == rhs)
153 | return true;
154 |
155 | if (Object.ReferenceEquals(lhs, null))
156 | return false;
157 |
158 | if (Object.ReferenceEquals(rhs, null))
159 | return false;
160 |
161 |
162 | return lhs.Level <= rhs.Level;
163 | }
164 |
165 | }
166 | }
--------------------------------------------------------------------------------
/TeconMoon's WiiVC Injector/Program.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.Win32;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Diagnostics;
5 | using System.Globalization;
6 | using System.IO;
7 | using System.Windows.Forms;
8 | using TeconMoon_s_WiiVC_Injector.Utils;
9 |
10 | namespace TeconMoon_s_WiiVC_Injector
11 | {
12 | static class Program
13 | {
14 | public static int ModVersion { get; } = 13;
15 |
16 | public static string Version => System.Reflection.Assembly.GetExecutingAssembly()
17 | .GetName().Version.ToString() + " mod " + ModVersion;
18 |
19 | public static List BatchBuildList { get; } = new List();
20 |
21 | public static bool AppendBatchBuildList(string item)
22 | {
23 | if (File.Exists(item))
24 | {
25 | string fileExtension = new FileInfo(item).Extension;
26 |
27 | if (fileExtension.Equals(".iso", StringComparison.OrdinalIgnoreCase)
28 | || fileExtension.Equals(".wbfs", StringComparison.OrdinalIgnoreCase))
29 | {
30 | BatchBuildList.Add(item);
31 | return true;
32 | }
33 | }
34 |
35 | return false;
36 | }
37 |
38 | ///
39 | /// Check for if .Net v3.5 component is installed.
40 | ///
41 | private static bool CheckForNet35()
42 | {
43 | if (Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v3.5") == null)
44 | {
45 | MessageBox.Show(
46 | Trt.Tr(".NET Framework 3.5 was not detected on your machine, which is required by programs used during the build process.\n\nYou should be able to enable this in \"Programs and Features\" under \"Turn Windows features on or off\", or download it from Microsoft.\n\nClick OK to close the injector and open \"Programs and Features\"..."),
47 | Trt.Tr(".NET Framework v3.5 not found..."));
48 |
49 | Process.Start("appwiz.cpl");
50 | return false;
51 | }
52 |
53 | return true;
54 | }
55 |
56 | private static bool CheckRuntimeEnvironment()
57 | {
58 | if (!CheckForNet35())
59 | {
60 | return false;
61 | }
62 |
63 | return true;
64 | }
65 |
66 | ///
67 | /// The main entry point for the application.
68 | ///
69 | [STAThread]
70 | static void Main(string[] args)
71 | {
72 | Application.EnableVisualStyles();
73 | Application.SetCompatibleTextRenderingDefault(false);
74 |
75 | foreach (string arg in args)
76 | {
77 | if (!arg.StartsWith("-") && !arg.StartsWith("/"))
78 | {
79 | AppendBatchBuildList(arg);
80 | continue;
81 | }
82 |
83 | if (arg.Substring(1).Equals("langtemplate", StringComparison.OrdinalIgnoreCase))
84 | {
85 | TranslationTemplate translationTemplate = TranslationTemplate.CreateTemplate(
86 | Application.StartupPath + @"\language.lang",
87 | "TeconMoon-s-WiiVC-Injector-Mod-Language",
88 | "English(en-us)",
89 | Version,
90 | "robin");
91 | translationTemplate.AppendFormTranslation(new WiiVC_Injector());
92 | translationTemplate.AppendFormTranslation(new SDCardMenu());
93 | translationTemplate.AppendStringResourceTranslation(
94 | Properties.Resources.ResourceManager.GetResourceSet(
95 | CultureInfo.InvariantCulture, false, false));
96 | return;
97 | }
98 | }
99 |
100 | if (!CheckRuntimeEnvironment())
101 | {
102 | return;
103 | }
104 |
105 | Application.Run(new WiiVC_Injector());
106 | }
107 | }
108 | }
109 |
--------------------------------------------------------------------------------
/TeconMoon's WiiVC Injector/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // General Information about an assembly is controlled through the following
6 | // set of attributes. Change these attribute values to modify the information
7 | // associated with an assembly.
8 | [assembly: AssemblyTitle("TeconMoon's WiiVC Injector Mod")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("TeconMoon's WiiVC Injector Mod")]
13 | [assembly: AssemblyCopyright("")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Setting ComVisible to false makes the types in this assembly not visible
18 | // to COM components. If you need to access a type in this assembly from
19 | // COM, set the ComVisible attribute to true on that type.
20 | [assembly: ComVisible(false)]
21 |
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM
23 | [assembly: Guid("8228dc31-4869-4c1c-8aed-d7ed37ecf3b9")]
24 |
25 | // Version information for an assembly consists of the following four values:
26 | //
27 | // Major Version
28 | // Minor Version
29 | // Build Number
30 | // Revision
31 | //
32 | // You can specify all the values or you can default the Build and Revision Numbers
33 | // by using the '*' as shown below:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("3.0.1.0")]
36 | [assembly: AssemblyFileVersion("3.0.1.0")]
37 |
--------------------------------------------------------------------------------
/TeconMoon's WiiVC Injector/Properties/Resources.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 | This is not a valid WAV file. It will not be loaded.
122 | Consider converting it with something like Audacity.
123 |
124 |
125 | 2nd GameCube Disc Image has not been specified
126 |
127 |
128 | Conversion Complete! Your packed game can be found here:
129 |
130 |
131 | Only 4 characters can be used, try again. Example: The Star Fox 64 (USA) Channel's Title ID is NADE01, so you would specify NADE as the Title ID
132 |
133 |
134 | Drive not specified, nowhere to place generated config
135 |
136 |
137 | (One-Time Download) Downloading base files from Nintendo... (cos.xml)
138 |
139 |
140 | (One-Time Download) Downloading base files from Nintendo... (dmcu.d.hex)
141 |
142 |
143 | iconTex.png downloaded from Cucholix's Repo
144 |
145 |
146 | The Wii U Common Key has been verified.
147 |
148 |
149 | Converting all image sources to expected TGA specification
150 |
151 |
152 |
153 | ..\Resources\clearbuildoutput.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
154 |
155 |
156 | Saving files from Nintendo for future use...
157 |
158 |
159 | Invalid Title ID
160 |
161 |
162 | Auto
163 |
164 |
165 | This is not a GameCube image. It will not be loaded.
166 |
167 |
168 | (One-Time Download) Downloading base files from Nintendo... (fw.img)
169 |
170 |
171 | Boot Sound has not been specified
172 |
173 |
174 | Icon has not been specified
175 |
176 |
177 | STOP
178 |
179 |
180 | Make sure your Banner is 1280x720 (16:9) to prevent distortion
181 |
182 |
183 | Build cancelled.
184 |
185 |
186 | (One-Time Download) Downloading base files from Nintendo... (bootLogoTex.tga)
187 |
188 |
189 | Your internet connection could not be verified, do you wish to try and download the necessary base files from Nintendo anyways? (This is a one-time download)
190 |
191 |
192 | Args:
193 |
194 |
195 | Check your hard drive space
196 |
197 |
198 | The Wii Video Mode Changer will now be launched. I recommend using the Smart Patcher option.
199 |
200 | If you're scared and don't know what you're doing, close the patcher window and nothing will be patched.
201 |
202 | Click OK to continue...
203 |
204 |
205 | TitleID...
206 |
207 |
208 | The Title Key has been verified.
209 |
210 |
211 | (One-Time Download) Downloading base files from Nintendo... (fw.tmd)
212 |
213 |
214 | boot.dol
215 |
216 |
217 | Your sound file will be cut off if it's longer than 6 seconds to prevent the Wii U from not loading it. When the Wii U plays the boot sound, it will fade out once it's done loading the game (usually after about 5 seconds). You can not change this.
218 |
219 |
220 | BUILD
221 |
222 |
223 | Specify your boot sound
224 |
225 |
226 | Stop Sound
227 |
228 |
229 | Wii Dumps (*.iso,*.wbfs)|*.iso;*.wbfs
230 |
231 |
232 | Closing
233 |
234 |
235 | This is not a GameCube image. It will not be loaded.
236 |
237 |
238 | (One-Time Download) Downloading base files from Nintendo... (bootMovie.h264)
239 |
240 |
241 | Title ID specification cancelled, reselect vWii NAND Title Launcher to specify
242 |
243 |
244 | Generating app.xml and meta.xml
245 |
246 |
247 | Play Sound
248 |
249 |
250 | Failed to download base files using JNUSTool, conversion will not continue
251 |
252 |
253 | Nintendont Forwarder (*.dol)|*.dol
254 |
255 |
256 | (One-Time Download) Downloading base files from Nintendo... (bootSound.btsnd)
257 |
258 |
259 | GamePad Banner has not been specified
260 |
261 |
262 | (One-Time Download) Downloading base files from Nintendo... (deint.txt)
263 |
264 |
265 | (One-Time Download) Downloading base files from Nintendo... (htk.bin)
266 |
267 |
268 | Banner has not been specified
269 |
270 |
271 | .
272 |
273 | Install your title using WUP Installer GX2 with signature patches enabled (CBHC, Haxchi, etc). Make sure you have signature patches enabled when launching your title.
274 |
275 | Click OK to continue...
276 |
277 |
278 | Please select your game before using this option
279 |
280 |
281 | Conversion complete...
282 |
283 |
284 | Conversion Complete...
285 |
286 |
287 | (Optional) Line 2
288 |
289 |
290 | Processing game for NFS Conversion
291 |
292 |
293 | Converting processed game to NFS format
294 |
295 |
296 | Copying base files to temporary build directory
297 |
298 |
299 | (One-Time Download) Downloading base files from Nintendo... (nn_hai_user.rpl)
300 |
301 |
302 | Your image will be converted to PNG (Lossless) to be later processed.
303 |
304 |
305 | Config generation complete.
306 |
307 |
308 | Specify your game file
309 |
310 |
311 | Download complete.
312 |
313 |
314 | (One-Time Download) Downloading base files from Nintendo... (boot.bin)
315 |
316 |
317 | bootTvTex.png downloaded from Cucholix's Repo
318 |
319 |
320 | (One-Time Download) Downloading base files from Nintendo... (c2w.img)
321 |
322 |
323 | XXXX
324 |
325 |
326 | <- Specify custom main.dol file
327 |
328 |
329 | .NET Framework 3.5 was not detected on your machine, which is required by programs used during the build process.
330 |
331 | You should be able to enable this in "Programs and Features" under "Turn Windows features on or off", or download it from Microsoft.
332 |
333 | Click OK to close the injector and open "Programs and Features"...
334 |
335 |
336 | N/A
337 |
338 |
339 | Are you sure you want to close?
340 |
341 |
342 | ..\Resources\TOOLDIR.zip;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
343 |
344 |
345 | Specify your GameCube game's 2nd disc
346 |
347 |
348 | Are you sure to cancel the current build progress?
349 |
350 |
351 | (One-Time Download) Downloading base files from Nintendo... (banner.gsh / fade.gsh)
352 |
353 |
354 | All conversions have been completed.
355 | Succeed: {0}.
356 | Failed: {1}.
357 | Skipped: {2}.
358 | Invalid: {3}.
359 |
360 |
361 | Make sure your GamePad Banner is 854x480 (16:9) to prevent distortion
362 |
363 |
364 | (One-Time Download) Downloading base files from Nintendo...
365 |
366 |
367 | Make sure your icon is 128x128 (1:1) to prevent distortion
368 |
369 |
370 | Internet Connection Verification Failed
371 |
372 |
373 | Conversion Complete
374 |
375 |
376 | Cucholix's Repo does not have assets for your game. You will need to provide your own. Would you like to visit the GBAtemp request thread?
377 |
378 |
379 | Executing:
380 |
381 |
382 | Output folder selection has been cancelled, conversion will not continue.
383 |
384 |
385 | Enter your WAD's Title ID
386 |
387 |
388 | Make sure your Logo is 170x42 to prevent distortion
389 |
390 |
391 | Game file has not been specified
392 |
393 |
394 | Game...
395 |
396 |
397 | Drive not specified, nowhere to download contents
398 |
399 |
400 | (One-Time Download) Downloading base files from Nintendo... (frisbiiU.rpx)
401 |
402 |
403 | GameCube Dumps (*.gcm,*.iso)|*.gcm;*.iso
404 |
405 |
406 | (One-Time Download) Downloading base files from Nintendo... (font.bin)
407 |
408 |
409 | This is not a Wii image. It will not be loaded.
410 |
411 |
412 | The Wii U Starbuck Ancast Key you have provided is incorrect
413 | (MD5 Hash verification failed)
414 |
415 |
416 | Converting user provided sound to btsnd format
417 |
418 |
419 | Enter your installed Wii Channel's 4-letter Title ID. If you don't know it, open a WAD for the channel in something like ShowMiiWads to view it.
420 |
421 |
422 | GameCube Disk 2 (*.gcm,*.iso)|*.gcm;*.iso
423 |
424 |
425 | Stop building
426 |
427 |
428 | Specify your replacement Nintendont Forwarder
429 |
430 |
431 | Game not found on Repo
432 |
433 |
434 | Can't create the specified output directory, conversion will not continue.
435 | Additional error information:
436 |
437 |
438 | DOL Files (*.dol)|*.dol
439 |
440 |
441 | .NET Framework v3.5 not found...
442 |
443 |
444 | Downloading...
445 |
446 |
447 | Encrypting contents into installable WUP Package
448 |
449 |
450 | The Title Key you have provided is incorrect
451 | (MD5 Hash verification failed)
452 |
453 |
454 | game
455 |
456 |
457 | Your hard drive may be low on space. The conversion process involves temporary files that can amount to more than double the size of your game. If you continue without clearing some hard drive space, the conversion may fail. Do you want to continue anyways?
458 |
459 |
460 | Conversion will now continue...
461 |
462 |
463 | NULL
464 |
465 |
466 | The Wii U Common Key you have provided is incorrect
467 | (MD5 Hash verification failed)
468 |
469 |
470 | ..\Resources\autoscroll.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
471 |
472 |
473 | Build succeed.
474 |
475 |
476 | Build failed.
477 |
478 |
479 | Auto generated.
480 |
481 |
482 | Create temporary directory failed, it may be caused by low space on hard drive, permission denied or invalid path name.
483 |
484 |
485 | Error
486 |
487 |
488 | Force
489 |
490 |
491 | Force (Deflicker)
492 |
493 |
494 | None
495 |
496 |
497 | 507 (Unstable)
498 |
499 |
500 | 1019 (Unstable)
501 |
502 |
503 | 2043 (Unstable)
504 |
505 |
506 | Automatic
507 |
508 |
509 | English
510 |
511 |
512 | German
513 |
514 |
515 | French
516 |
517 |
518 | Spanish
519 |
520 |
521 | Italian
522 |
523 |
524 | Dutch
525 |
526 |
527 | Cheats
528 |
529 |
530 | Memcard Emulation
531 |
532 |
533 | Cheat Path
534 |
535 |
536 | Force Widescreen
537 |
538 |
539 | Force Progressive
540 |
541 |
542 | Unlock Read Speed
543 |
544 |
545 | OSReport
546 |
547 |
548 | WiiU Widescreen
549 |
550 |
551 | Log
552 |
553 |
554 | Auto Video Width
555 |
556 |
557 | Patch PAL50
558 |
559 |
560 | TRI Arcade Mode
561 |
562 |
563 | Wiimote CC Rumble
564 |
565 |
566 | Skip IPL
567 |
568 |
569 | Download Error
570 |
571 |
572 | Failed to connect to Cucholix's Repo.
573 |
574 |
575 | failed.
576 |
577 |
578 | done.
579 |
580 |
581 | Checking temporary directory
582 |
583 |
584 | Checking free disk space
585 |
586 |
587 | Checking output directory
588 |
589 |
590 | Checking JNUS stuffs
591 |
592 |
593 | terminated unexpectedly:
594 |
595 |
596 | Left [{0}].
597 |
598 |
599 | ..\Resources\ids.csv;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
600 |
601 |
602 | Debug
603 |
604 |
605 | Info
606 |
607 |
608 | Invalid Title: {0}.
609 |
610 |
611 | does not exit normally.
612 |
613 |
614 | Download background from GameTDB.com
615 |
616 |
617 | Use default background
618 |
619 |
620 | ..\Resources\universal_Wii_WiiWare_template_bootTvTex.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
621 |
622 |
623 | ..\Resources\universal_Wii_WiiWare_template_iconTex.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
624 |
625 |
626 | Fail to download images from GameTDB.com.
627 |
628 |
629 | Processing [{0}] [{1}]...
630 |
631 |
632 | Title output folder already exists: {0}
633 | Skipping: {1}.
634 |
635 |
636 |
637 | Injector version: {0}
638 |
639 |
640 | Build type: {0}
641 |
642 |
643 | Batch build: {0}
644 |
645 |
646 | Yes
647 |
648 |
649 | No
650 |
651 |
652 | Build options:
653 |
654 |
655 | Build time(UTC): {0}
656 |
657 |
658 | {0}(Available free space: {1})
659 |
660 |
--------------------------------------------------------------------------------
/TeconMoon's WiiVC Injector/Properties/Settings.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace TeconMoon_s_WiiVC_Injector.Properties {
12 |
13 |
14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.3.0.0")]
16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
17 |
18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
19 |
20 | public static Settings Default {
21 | get {
22 | return defaultInstance;
23 | }
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/TeconMoon's WiiVC Injector/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/TeconMoon's WiiVC Injector/Properties/app.manifest:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
47 |
54 |
55 |
69 |
--------------------------------------------------------------------------------
/TeconMoon's WiiVC Injector/Resources/TOOLDIR.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timefox/TeconMoon-s-WiiVC-Injector-Mod/5fe2b874ca2f05a266bb51cc0f6f58709d71fd90/TeconMoon's WiiVC Injector/Resources/TOOLDIR.zip
--------------------------------------------------------------------------------
/TeconMoon's WiiVC Injector/Resources/autoscroll.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timefox/TeconMoon-s-WiiVC-Injector-Mod/5fe2b874ca2f05a266bb51cc0f6f58709d71fd90/TeconMoon's WiiVC Injector/Resources/autoscroll.png
--------------------------------------------------------------------------------
/TeconMoon's WiiVC Injector/Resources/clearbuildoutput.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timefox/TeconMoon-s-WiiVC-Injector-Mod/5fe2b874ca2f05a266bb51cc0f6f58709d71fd90/TeconMoon's WiiVC Injector/Resources/clearbuildoutput.png
--------------------------------------------------------------------------------
/TeconMoon's WiiVC Injector/Resources/gc.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timefox/TeconMoon-s-WiiVC-Injector-Mod/5fe2b874ca2f05a266bb51cc0f6f58709d71fd90/TeconMoon's WiiVC Injector/Resources/gc.ttf
--------------------------------------------------------------------------------
/TeconMoon's WiiVC Injector/Resources/universal_Wii_WiiWare_template_bootTvTex.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timefox/TeconMoon-s-WiiVC-Injector-Mod/5fe2b874ca2f05a266bb51cc0f6f58709d71fd90/TeconMoon's WiiVC Injector/Resources/universal_Wii_WiiWare_template_bootTvTex.png
--------------------------------------------------------------------------------
/TeconMoon's WiiVC Injector/Resources/universal_Wii_WiiWare_template_iconTex.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timefox/TeconMoon-s-WiiVC-Injector-Mod/5fe2b874ca2f05a266bb51cc0f6f58709d71fd90/TeconMoon's WiiVC Injector/Resources/universal_Wii_WiiWare_template_iconTex.png
--------------------------------------------------------------------------------
/TeconMoon's WiiVC Injector/Resources/wii.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timefox/TeconMoon-s-WiiVC-Injector-Mod/5fe2b874ca2f05a266bb51cc0f6f58709d71fd90/TeconMoon's WiiVC Injector/Resources/wii.ttf
--------------------------------------------------------------------------------
/TeconMoon's WiiVC Injector/Resources/wiiware.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timefox/TeconMoon-s-WiiVC-Injector-Mod/5fe2b874ca2f05a266bb51cc0f6f58709d71fd90/TeconMoon's WiiVC Injector/Resources/wiiware.png
--------------------------------------------------------------------------------
/TeconMoon's WiiVC Injector/SplitButton.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Drawing;
3 | using System.Windows.Forms;
4 |
5 | namespace TeconMoon_s_WiiVC_Injector
6 | {
7 | namespace Utils
8 | {
9 | namespace WinForms
10 | {
11 | internal class SplitButton : Button
12 | {
13 | public SplitButton()
14 | {
15 | //
16 | // McAfee(lovesafe 16R22, up-to-date, 5/28/2020)
17 | // will kill us because the following line:
18 | //
19 | // ImageAlign = ContentAlignment.MiddleRight;
20 | //
21 | // Indeed, you can't set any button's ImageAlign property
22 | // in THIS project. I have tested this class in a new emtpy
23 | // winform project, and it's for free to use ImageAlign.
24 | //
25 | typeof(SplitButton).GetProperty("ImageAlign")
26 | .SetValue(this, ContentAlignment.MiddleRight);
27 |
28 | //
29 | // But the magic is that after the reflection method used,
30 | // here you can call ImageAlign = ContentAlignment.MiddleRight
31 | // without any problem now. And it's not the problem of the
32 | // code order. If the reflection method was not called before
33 | // it, we will still be killed even if you put it to
34 | // last line of the function.
35 | // So what the hell is in McAfee's virus signature database...
36 | //
37 | // ImageAlign = ContentAlignment.MiddleRight;
38 |
39 | TextImageRelation = TextImageRelation.TextBeforeImage;
40 |
41 | //
42 | // Assign slpit image.
43 | //
44 | Image = CreateSplitImage();
45 |
46 | splitWidth = SplitWidth;
47 | marginTop = MarginTop;
48 | marginBottom = MarginBottom;
49 | }
50 |
51 | //
52 | // Create a triangle image.
53 | //
54 | private static Image CreateSplitImage()
55 | {
56 | int splitImgWidth = 8;
57 | int splitImgHeight = 4;
58 | Bitmap bitmap = new Bitmap(splitImgWidth, splitImgHeight);
59 | Point[] points = {
60 | new Point(0, 0),
61 | new Point(splitImgWidth, 0),
62 | new Point(splitImgWidth / 2, splitImgHeight) };
63 |
64 | using (Graphics graphics = Graphics.FromImage(bitmap))
65 | {
66 | graphics.FillPolygon(
67 | new SolidBrush(Color.Black),
68 | points);
69 | }
70 |
71 | return bitmap;
72 | }
73 |
74 | //
75 | // With the reflection method, using this property will casue
76 | // a performance issue.
77 | //
78 | private int SplitWidth
79 | {
80 | get
81 | {
82 | dynamic margin = typeof(SplitButton).GetProperty("Margin").GetValue(this);
83 | return Image.Width + margin.Left + margin.Right;
84 | }
85 | }
86 |
87 | //
88 | // With the reflection method, using this property will casue
89 | // a performance issue.
90 | //
91 | private int MarginTop
92 | {
93 | get
94 | {
95 | dynamic margin = typeof(SplitButton).GetProperty("Margin").GetValue(this);
96 | return margin.Top;
97 | }
98 | }
99 |
100 | //
101 | // Can't get bottom to work even using reflection under McAfee.
102 | //
103 | private int MarginBottom => MarginTop;
104 |
105 | //
106 | // Cache the properties, but bewared that if the margin
107 | // is changed at runtime, these cached values will not
108 | // be updated. Adding an event handler for margin changed
109 | // will do it well, but it's unnecessary for us here.
110 | //
111 | private readonly int splitWidth = 0;
112 | private readonly int marginTop = 0;
113 | private readonly int marginBottom = 0;
114 |
115 | public ContextMenuStrip SplitMenu { get; set; }
116 |
117 | protected override void OnClick(EventArgs e)
118 | {
119 | Point clickPoint = PointToClient(new Point(MousePosition.X, MousePosition.Y));
120 |
121 | if (clickPoint.X < (Width - splitWidth))
122 | {
123 | base.OnClick(e);
124 | }
125 | else
126 | {
127 | ShowButtonMenu();
128 | }
129 | }
130 |
131 | protected override void OnPaint(PaintEventArgs pevent)
132 | {
133 | base.OnPaint(pevent);
134 |
135 | //
136 | // If you see any 'Weird' codes, that is because CRAZY McAfee.
137 | //
138 | pevent.Graphics.DrawLine(
139 | new Pen(Color.Black, 1),
140 | Width - splitWidth,
141 | marginTop,
142 | Width - splitWidth,
143 | Height - marginBottom);
144 | }
145 |
146 | private void ShowButtonMenu()
147 | {
148 | SplitMenu?.Show(
149 | this, new Point(0, this.Height),
150 | ToolStripDropDownDirection.BelowRight);
151 | }
152 | }
153 | }
154 | }
155 | }
156 |
--------------------------------------------------------------------------------
/TeconMoon's WiiVC Injector/TeconMoon's WiiVC Injector.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {8228DC31-4869-4C1C-8AED-D7ED37ECF3B9}
8 | WinExe
9 | TeconMoon_s_WiiVC_Injector
10 | TeconMoon%27s WiiVC Injector Mod
11 | v4.6.1
12 | 512
13 | true
14 | false
15 |
16 | C:\Users\Khade\Desktop\
17 | true
18 | Disk
19 | false
20 | Foreground
21 | 7
22 | Days
23 | false
24 | false
25 | true
26 | 1
27 | 1.0.0.%2a
28 | false
29 | true
30 | true
31 |
32 |
33 | AnyCPU
34 | true
35 | full
36 | false
37 | bin\Debug\
38 | DEBUG;TRACE
39 | prompt
40 | 4
41 |
42 |
43 | AnyCPU
44 | pdbonly
45 | true
46 | bin\Release\
47 | TRACE
48 | prompt
49 | 4
50 |
51 |
52 | WiiU.ico
53 |
54 |
55 |
56 | 8B2598DF212C90E8BD2B80161EEBF23E278C0C9B
57 |
58 |
59 | TeconMoon%27s WiiVC Injector_TemporaryKey.pfx
60 |
61 |
62 | false
63 |
64 |
65 | false
66 |
67 |
68 | LocalIntranet
69 |
70 |
71 |
72 | Properties\app.manifest
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 | Form
93 |
94 |
95 | Form
96 |
97 |
98 | Form
99 |
100 |
101 | Form
102 |
103 |
104 | Form
105 |
106 |
107 |
108 |
109 |
110 | Component
111 |
112 |
113 |
114 | Form
115 |
116 |
117 | Form1.cs
118 |
119 |
120 | Form
121 |
122 |
123 | Form2.cs
124 |
125 |
126 |
127 |
128 | True
129 | True
130 | Resources.resx
131 |
132 |
133 |
134 |
135 |
136 | Form1.cs
137 | Designer
138 |
139 |
140 | Form2.cs
141 |
142 |
143 | ResXFileCodeGenerator
144 | Designer
145 | Resources.Designer.cs
146 |
147 |
148 |
149 | SettingsSingleFileGenerator
150 | Settings.Designer.cs
151 |
152 |
153 | True
154 | Settings.settings
155 | True
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 | False
179 | Microsoft .NET Framework 4.6.1 %28x86 and x64%29
180 | true
181 |
182 |
183 | False
184 | .NET Framework 3.5 SP1
185 | false
186 |
187 |
188 |
189 |
--------------------------------------------------------------------------------
/TeconMoon's WiiVC Injector/Tga.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Drawing;
3 | using System.Drawing.Imaging;
4 | using System.IO;
5 | using System.Text;
6 |
7 | namespace ImageUtils
8 | {
9 |
10 | class Tga
11 | {
12 |
13 | public static Image loadTga(string path)
14 | {
15 | using (Stream stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read))
16 | {
17 | return loadTga(stream);
18 | }
19 | }
20 |
21 | public static Image loadTga(Stream stream)
22 | {
23 | Bitmap result = null;
24 |
25 | BinaryReader reader = new BinaryReader(stream);
26 |
27 | byte idFieldLength = (byte)stream.ReadByte();
28 | byte colorMap = (byte)stream.ReadByte();
29 | byte imageType = (byte)stream.ReadByte();
30 | reader.BaseStream.Position = 0xC;
31 | int width = reader.ReadUInt16();
32 | reader.BaseStream.Position = 0xE;
33 | int height = reader.ReadUInt16();
34 | reader.BaseStream.Position = 0x10;
35 | byte bpp = (byte)stream.ReadByte();
36 | reader.BaseStream.Position = 0x11;
37 | byte flags = (byte)stream.ReadByte();
38 |
39 | if(colorMap > 0 || bpp < 16 || imageType > 3) {
40 | throw new InvalidDataException("Unsupported TGA file.");
41 | }
42 |
43 | if (idFieldLength > 0)
44 | {
45 | stream.Read(new byte[idFieldLength], 0, idFieldLength);
46 | }
47 |
48 | byte[] line = new byte[width * (bpp / 8)];
49 |
50 | result = new Bitmap(width, height);
51 | for (int y = height - 1; y >= 0; y--)
52 | {
53 | switch (bpp)
54 | {
55 | case 16:
56 | int hi, lo;
57 | for (int x = 0; x < width; x++)
58 | {
59 | hi = stream.ReadByte();
60 | lo = stream.ReadByte();
61 |
62 | Color pixel = Color.FromArgb(255,
63 | (byte)(((lo & 0x7F) >> 2) << 3),
64 | (byte)((((lo & 0x3) << 3) + ((hi & 0xE0) >> 5)) << 3),
65 | (byte)((hi & 0x1F) << 3)
66 | );
67 | result.SetPixel(x, y, pixel);
68 | }
69 | break;
70 | case 24:
71 | stream.Read(line, 0, line.Length);
72 | for (int x = 0; x < width; x++)
73 | {
74 | Color pixel = Color.FromArgb(255,
75 | line[x * 3 + 2],
76 | line[x * 3 + 1],
77 | line[x * 3]
78 | );
79 | result.SetPixel(x, y, pixel);
80 | }
81 | break;
82 | case 32:
83 | stream.Read(line, 0, line.Length);
84 | for (int x = 0; x < width; x++)
85 | {
86 | Color pixel = Color.FromArgb(line[x * 4 + 3],
87 | line[x * 4 + 2],
88 | line[x * 4 + 1],
89 | line[x * 4]);
90 | result.SetPixel(x, y, pixel);
91 | }
92 | break;
93 | }
94 | }
95 |
96 | switch((flags >> 4) & 0x3)
97 | {
98 | case 1:
99 | result.RotateFlip(RotateFlipType.RotateNoneFlipX);
100 | break;
101 | case 2:
102 | result.RotateFlip(RotateFlipType.RotateNoneFlipY);
103 | break;
104 | case 3:
105 | result.RotateFlip(RotateFlipType.RotateNoneFlipXY);
106 | break;
107 | }
108 |
109 |
110 | return result;
111 | }
112 |
113 | public static void saveTGA(Image image, PixelFormat pixelFormat, string path)
114 | {
115 | Bitmap bitmap = (Bitmap)image;
116 |
117 | byte entryPerPixel;
118 | byte bpp;
119 |
120 | switch (pixelFormat)
121 | {
122 | case PixelFormat.Format32bppArgb:
123 | entryPerPixel = 8;
124 | bpp = 32;
125 | break;
126 | case PixelFormat.Format24bppRgb:
127 | entryPerPixel = 0;
128 | bpp = 24;
129 | break;
130 | default:
131 | throw new InvalidDataException("Unsupported bpp.");
132 | }
133 |
134 | using (Stream file = File.Create(path))
135 | {
136 | using (BinaryWriter writer = new BinaryWriter(file))
137 | {
138 | // Header
139 | writer.Write(new byte[]
140 | {
141 | 0, // ID length
142 | 0, // no color map
143 | 2, // uncompressed, true color
144 | 0, 0, 0, 0,
145 | 0,
146 | 0, 0, 0, 0, // x and y origin
147 | (byte)(bitmap.Width & 0x00FF),
148 | (byte)((bitmap.Width & 0xFF00) >> 8),
149 | (byte)(bitmap.Height & 0x00FF),
150 | (byte)((bitmap.Height & 0xFF00) >> 8),
151 | bpp,
152 | entryPerPixel
153 | });
154 |
155 | // Image
156 | for (int y = 0; y < bitmap.Height; y++)
157 | {
158 | for (int x = 0; x < bitmap.Width; x++)
159 | {
160 | Color c = bitmap.GetPixel(x, bitmap.Height - y - 1);
161 | writer.Write(new[]
162 | {
163 | c.B,
164 | c.G,
165 | c.R
166 | });
167 |
168 | if (bpp == 32)
169 | {
170 | writer.Write(c.A);
171 | }
172 | }
173 | }
174 |
175 | // Footer
176 | writer.Write(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 });
177 | writer.Write(Encoding.ASCII.GetBytes("TRUEVISION-XFILE"));
178 | writer.Write(new byte[] { 46, 0 });
179 | }
180 | }
181 | }
182 |
183 | }
184 |
185 | }
--------------------------------------------------------------------------------
/TeconMoon's WiiVC Injector/Trt.cs:
--------------------------------------------------------------------------------
1 | using System.Windows.Forms;
2 | using TeconMoon_s_WiiVC_Injector.Utils;
3 |
4 | namespace TeconMoon_s_WiiVC_Injector
5 | {
6 | static class Trt
7 | {
8 | private static TranslationTemplate Tt { get; } = TranslationTemplate.LoadTemplate(
9 | Application.StartupPath + @"\language.lang", true);
10 |
11 | public static bool IsValidate
12 | {
13 | get
14 | {
15 | return Tt.IsValidate;
16 | }
17 | }
18 |
19 | static public void TranslateForm(Form form)
20 | {
21 | Tt.TranslateForm(form);
22 | }
23 |
24 | static public string Tr(string s)
25 | {
26 | return Tt.Tr(s);
27 | }
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/TeconMoon's WiiVC Injector/Utils.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections;
3 | using System.Collections.Generic;
4 | using System.Drawing;
5 | using System.Drawing.Imaging;
6 | using System.Drawing.Text;
7 | using System.Globalization;
8 | using System.IO;
9 | using System.Linq;
10 | using System.Reflection;
11 | using System.Resources;
12 | using System.Runtime.InteropServices;
13 | using System.Text;
14 | using System.Threading;
15 | using System.Windows.Forms;
16 |
17 | namespace TeconMoon_s_WiiVC_Injector
18 | {
19 | namespace Utils
20 | {
21 | namespace Build
22 | {
23 | enum BuildOutputType
24 | {
25 | Normal,
26 | Succeed,
27 | Error,
28 | Step,
29 | Exec,
30 | };
31 |
32 | class BuildOutputItem
33 | {
34 | public string Output { get; set; }
35 | public BuildOutputType OutputType { get; set; }
36 | };
37 |
38 | class BuildOutputBuffer
39 | {
40 | public BuildOutputBuffer(int initialCapacity = 16 * 1024)
41 | {
42 | stringBuilder = new StringBuilder(initialCapacity);
43 | }
44 |
45 | public event EventHandler FlushBuffer;
46 |
47 | private List buildOutputItems = new List();
48 | private StringBuilder stringBuilder;
49 |
50 | private bool OutputCanbeCached(BuildOutputType outputType)
51 | {
52 | if (buildOutputItems.Any())
53 | {
54 | return buildOutputItems.Last().OutputType == outputType;
55 | }
56 |
57 | return false;
58 | }
59 |
60 | private void FlushCache()
61 | {
62 | if (buildOutputItems.Any())
63 | {
64 | buildOutputItems.Last().Output = stringBuilder.ToString();
65 | }
66 |
67 | stringBuilder.Clear();
68 | }
69 |
70 | public void AppendOutput(string output, BuildOutputType outputType, bool appendNewline = true)
71 | {
72 | if (String.IsNullOrEmpty(output))
73 | {
74 | return;
75 | }
76 |
77 | if (!OutputCanbeCached(outputType))
78 | {
79 | FlushCache();
80 |
81 | buildOutputItems.Add(new BuildOutputItem()
82 | {
83 | OutputType = outputType
84 | });
85 | }
86 |
87 | stringBuilder.Append(output);
88 | if (appendNewline)
89 | {
90 | stringBuilder.Append(Environment.NewLine);
91 | }
92 | }
93 |
94 | public void Flush()
95 | {
96 | FlushCache();
97 |
98 | EventHandler handler = FlushBuffer;
99 | if (handler == null)
100 | {
101 | buildOutputItems.Clear();
102 | return;
103 | }
104 |
105 | while (buildOutputItems.Any())
106 | {
107 | BuildOutputItem item = buildOutputItems.First();
108 | handler.Invoke(this, item);
109 | buildOutputItems.Remove(item);
110 | }
111 | }
112 | }
113 | }
114 |
115 | class Draw
116 | {
117 | // Get a adjusted font which is fit to specified width and height.
118 | // Using Graphics's method.
119 | // Modified from MSDN: https://msdn.microsoft.com/en-us/library/bb986765.aspx
120 | public static Font GetGraphicAdjustedFont(
121 | Graphics g,
122 | string graphicString,
123 | Font originalFont,
124 | int containerWidth,
125 | int containerHeight,
126 | int maxFontSize,
127 | int minFontSize,
128 | StringFormat stringFormat,
129 | bool smallestOnFail
130 | )
131 | {
132 | Font testFont = null;
133 | // We utilize MeasureString which we get via a control instance
134 | for (int adjustedSize = maxFontSize; adjustedSize >= minFontSize; adjustedSize--)
135 | {
136 | testFont = new Font(originalFont.Name, adjustedSize, originalFont.Style);
137 |
138 | // Test the string with the new size
139 | SizeF adjustedSizeNew = g.MeasureString(
140 | graphicString,
141 | testFont,
142 | containerWidth,
143 | stringFormat);
144 |
145 | if (containerWidth > Convert.ToInt32(adjustedSizeNew.Width) &&
146 | containerHeight > Convert.ToInt32(adjustedSizeNew.Height))
147 | {
148 | // Good font, return it
149 | return testFont;
150 | }
151 | }
152 |
153 | // If you get here there was no fontsize that worked
154 | // return minimumSize or original?
155 | if (smallestOnFail)
156 | {
157 | return testFont;
158 | }
159 | else
160 | {
161 | return originalFont;
162 | }
163 | }
164 |
165 | // Get a adjusted font which is fit to specified width and height.
166 | // Using TextRenderer's method.
167 | public static Font GetTextRendererAdjustedFont(
168 | Graphics g,
169 | string text,
170 | Font originalFont,
171 | int containerWidth,
172 | int containerHeight,
173 | int maxFontSize,
174 | int minFontSize,
175 | TextFormatFlags flags,
176 | bool smallestOnFail
177 | )
178 | {
179 | Font testFont = null;
180 | // We utilize MeasureText which we get via a control instance
181 | for (int adjustedSize = maxFontSize; adjustedSize >= minFontSize; adjustedSize--)
182 | {
183 | testFont = new Font(originalFont.Name, adjustedSize, originalFont.Style);
184 |
185 | // Test the string with the new size
186 | Size adjustedSizeNew = TextRenderer.MeasureText(
187 | g,
188 | text,
189 | testFont,
190 | new Size(containerWidth, containerHeight),
191 | flags);
192 |
193 | if (containerWidth > adjustedSizeNew.Width &&
194 | containerHeight > adjustedSizeNew.Height)
195 | {
196 | // Good font, return it
197 | return testFont;
198 | }
199 | }
200 |
201 | // If you get here there was no fontsize that worked
202 | // return minimumSize or original?
203 | if (smallestOnFail)
204 | {
205 | return testFont;
206 | }
207 | else
208 | {
209 | return originalFont;
210 | }
211 | }
212 |
213 | // Draw a string in a specified rectangle with
214 | // a specified font with max font size that can
215 | // fit to the rectangle.
216 | public static void ImageDrawString(
217 | ref Bitmap bitmap,
218 | string s,
219 | Rectangle rectangle,
220 | Font font,
221 | Color foreColor,
222 | bool adjustedFontByTextRenderer,
223 | bool drawStringByTextRenderer
224 | )
225 | {
226 | StringFormat stringFormat = StringFormat.GenericDefault;
227 |
228 | using (Graphics graphics = Graphics.FromImage(bitmap))
229 | {
230 | TextFormatFlags flags = TextFormatFlags.HorizontalCenter
231 | | TextFormatFlags.VerticalCenter
232 | | TextFormatFlags.WordBreak;
233 |
234 | if (!adjustedFontByTextRenderer)
235 | {
236 | font = GetGraphicAdjustedFont(
237 | graphics,
238 | s,
239 | font,
240 | rectangle.Width,
241 | rectangle.Height,
242 | 100, 8,
243 | stringFormat,
244 | true);
245 | }
246 | else
247 | {
248 | // Can't get the correct word break output
249 | // if we use GetGraphicAdjustedFont.
250 | // But it's really more slower than
251 | // GetGraphicAdjustedFont.
252 | font = GetTextRendererAdjustedFont(
253 | graphics,
254 | s,
255 | font,
256 | rectangle.Width,
257 | rectangle.Height,
258 | 64, 8,
259 | flags,
260 | true);
261 | }
262 |
263 | if (!drawStringByTextRenderer)
264 | {
265 | SizeF sizeF = graphics.MeasureString(s, font, rectangle.Width);
266 |
267 | RectangleF rectF = new RectangleF(
268 | rectangle.X + (rectangle.Width - sizeF.Width) / 2,
269 | rectangle.Y + (rectangle.Height - sizeF.Height) / 2,
270 | sizeF.Width,
271 | sizeF.Height);
272 |
273 | graphics.DrawString(
274 | s,
275 | font,
276 | new SolidBrush(foreColor),
277 | rectF,
278 | stringFormat);
279 | }
280 | else
281 | {
282 | // Poor draw performance, both for speed and output result.
283 | Size size = TextRenderer.MeasureText(
284 | graphics,
285 | s,
286 | font,
287 | new Size(rectangle.Width, rectangle.Height),
288 | flags);
289 |
290 | Rectangle rect = new Rectangle(
291 | rectangle.X + (rectangle.Width - size.Width) / 2,
292 | rectangle.Y + (rectangle.Height - size.Height) / 2,
293 | size.Width,
294 | size.Height);
295 |
296 | TextRenderer.DrawText(
297 | graphics,
298 | s,
299 | font,
300 | rect,
301 | foreColor,
302 | flags);
303 | }
304 | }
305 | }
306 |
307 | public static void SetGraphicsBestQuility(ref Graphics gfx)
308 | {
309 | gfx.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
310 | gfx.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
311 | gfx.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
312 | gfx.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
313 | gfx.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
314 | }
315 |
316 | public static Image ResizeAndFitImage(Image image, Size newSize)
317 | {
318 | return ResizeAndFitImage(image, newSize, newSize);
319 | }
320 |
321 | public static Image ResizeAndFitImage(Image image, Size newSize, Size fillSize)
322 | {
323 | Bitmap result = new Bitmap(fillSize.Width, fillSize.Height);
324 | result.SetResolution(image.HorizontalResolution, image.VerticalResolution);
325 |
326 | Graphics gfx = Graphics.FromImage(result);
327 | SetGraphicsBestQuility(ref gfx);
328 | gfx.FillRectangle(Brushes.White, 0, 0, fillSize.Width, fillSize.Height);
329 |
330 | using (ImageAttributes wrapMode = new ImageAttributes())
331 | {
332 | wrapMode.SetWrapMode(System.Drawing.Drawing2D.WrapMode.TileFlipXY);
333 |
334 | int y = (fillSize.Height / 2) - newSize.Height / 2;
335 | int x = (fillSize.Width / 2) - newSize.Width / 2;
336 |
337 | Rectangle destRect = new Rectangle(x, y, newSize.Width, newSize.Height);
338 | gfx.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, wrapMode);
339 | }
340 |
341 | gfx.Dispose();
342 | image.Dispose();
343 | return result;
344 | }
345 | }
346 |
347 | public static class RichTextBoxExtensions
348 | {
349 | public static void AppendText(this RichTextBox box, string text, Color color)
350 | {
351 | AppendText(box, text, color, null);
352 | }
353 |
354 | public static void AppendText(this RichTextBox box, string text, Color color, Font font)
355 | {
356 | Win32Native.LockWindowUpdate(box.Handle);
357 | int savedSelectionStart = box.SelectionStart;
358 | int savedSelectionLength = box.SelectionLength;
359 | box.SelectionStart = box.TextLength;
360 | box.SelectionLength = 0;
361 |
362 | box.SelectionColor = color;
363 | if (font != null)
364 | {
365 | box.SelectionFont = font;
366 | }
367 |
368 | box.AppendText(text);
369 | box.SelectionColor = box.ForeColor;
370 | box.SelectionFont = box.Font;
371 | box.SelectionStart = savedSelectionStart;
372 | box.SelectionLength = savedSelectionLength;
373 | Win32Native.LockWindowUpdate(IntPtr.Zero);
374 | }
375 | }
376 |
377 | class StringEx
378 | {
379 | // Check if the input byte array is GB2312 encoded.
380 | static public bool IsGB2312EncodingArray(byte[] b)
381 | {
382 | int i = 0;
383 | while (i < b.Length)
384 | {
385 | if (b[i] <= 127)
386 | {
387 | ++i;
388 | continue;
389 | }
390 |
391 | if (b[i] >= 176 && b[i] <= 247)
392 | {
393 | if (i == b.Length - 1)
394 | {
395 | return false;
396 | }
397 | ++i;
398 |
399 | if (b[i] < 160 || b[i] > 254)
400 | {
401 | return false;
402 | }
403 |
404 | ++i;
405 | }
406 | else
407 | {
408 | return false;
409 | }
410 | }
411 |
412 | return true;
413 | }
414 |
415 | // Get a probably encoding object for input array.
416 | static public Encoding GetArrayEncoding(byte[] b)
417 | {
418 | if (IsGB2312EncodingArray(b))
419 | {
420 | return Encoding.GetEncoding("GB2312");
421 | }
422 |
423 | // We assume it is utf8 by default.
424 | return Encoding.UTF8;
425 | }
426 |
427 | // Read a string from a binary stream.
428 | static public string ReadStringFromBinaryStream(BinaryReader reader, long position, bool peek = false)
429 | {
430 | long oldPosition = 0;
431 |
432 | if (peek)
433 | {
434 | oldPosition = reader.BaseStream.Position;
435 | }
436 |
437 | reader.BaseStream.Position = position;
438 | ArrayList readBuffer = new ArrayList();
439 | byte b;
440 | while ((b = reader.ReadByte()) != 0)
441 | {
442 | readBuffer.Add(b);
443 | }
444 |
445 | if (peek)
446 | {
447 | reader.BaseStream.Position = oldPosition;
448 | }
449 |
450 | byte[] readBytes = readBuffer.OfType().ToArray();
451 | return Encoding.Default.GetString(Encoding.Convert(
452 | GetArrayEncoding(readBytes),
453 | Encoding.Default,
454 | readBytes));
455 | }
456 | }
457 |
458 | class TranslationTemplate
459 | {
460 | protected const string SectionResource = "@Resource";
461 | protected const string KeyFormTitle = "@Title";
462 | protected const string KeyLanguage = "language";
463 | protected const string KeyVerion = "verion";
464 | protected const string KeyAuthor = "author";
465 |
466 | private readonly bool cacheEnabled = false;
467 | private ReaderWriterLockSlim trStrResCacheLock = new ReaderWriterLockSlim();
468 | private Dictionary trStrResCache = new Dictionary();
469 |
470 | private delegate void TrControl(Control control);
471 |
472 | private struct SpecialControlTr
473 | {
474 | public Type controlType;
475 | public TrControl trControl;
476 | };
477 |
478 | private IniFile TemplateFile
479 | {
480 | get;
481 | set;
482 | }
483 |
484 | public bool IsValidate
485 | {
486 | get
487 | {
488 | if (String.IsNullOrWhiteSpace(TemplateFileName))
489 | {
490 | return false;
491 | }
492 |
493 | return File.Exists(TemplateFileName);
494 | }
495 | }
496 |
497 | public string TemplateFileName
498 | {
499 | get
500 | {
501 | return TemplateFile != null ? TemplateFile.FileName : "";
502 | }
503 | }
504 |
505 | private TranslationTemplate(string templateFile, bool enableCache)
506 | {
507 | TemplateFile = new IniFile(templateFile);
508 | cacheEnabled = enableCache;
509 | }
510 |
511 | static public TranslationTemplate LoadTemplate(string templateFilePath, bool enableCache)
512 | {
513 | return new TranslationTemplate(templateFilePath, enableCache);
514 | }
515 |
516 | public static TranslationTemplate CreateTemplate(
517 | string templateFilePath,
518 | string appName,
519 | string defaultLanguageName,
520 | string version,
521 | string author
522 | )
523 | {
524 | TranslationTemplate template = new TranslationTemplate(templateFilePath, false);
525 |
526 | template.TemplateFile.CurrentSection = appName;
527 | template.TemplateFile.WriteStringValue(KeyLanguage, defaultLanguageName);
528 | template.TemplateFile.WriteStringValue(KeyVerion, version);
529 | template.TemplateFile.WriteStringValue(KeyAuthor, author);
530 |
531 | return template;
532 | }
533 |
534 | public void AppendFormTranslation(Form form)
535 | {
536 | TemplateFile.CurrentSection = form.Name;
537 | TemplateFile.WriteStringValue(KeyFormTitle, form.Text);
538 |
539 | foreach (Control control in form.Controls)
540 | {
541 | AppendControlTranslation(control);
542 | }
543 | }
544 |
545 | private void AppendControlTranslation(Control control)
546 | {
547 | if (!String.IsNullOrEmpty(control.Text))
548 | {
549 | TemplateFile.WriteStringValue(control.Name, control.Text);
550 | }
551 |
552 | foreach (Control subControl in control.Controls)
553 | {
554 | AppendControlTranslation(subControl);
555 | }
556 |
557 | ToolStrip toolStrip = control as ToolStrip;
558 | if (toolStrip != null)
559 | {
560 | foreach (ToolStripItem item in toolStrip.Items)
561 | {
562 | AppendToolStripItemTranslation(item);
563 | }
564 | }
565 | }
566 |
567 | private void AppendToolStripItemTranslation(ToolStripItem item)
568 | {
569 | if (!String.IsNullOrEmpty(item.Text))
570 | {
571 | TemplateFile.WriteStringValue(item.Name, item.Text);
572 | }
573 | }
574 |
575 | public void AppendStringResourceTranslation(ResourceSet resourceSet)
576 | {
577 | TemplateFile.CurrentSection = SectionResource;
578 |
579 | foreach (DictionaryEntry dictionaryEntry in resourceSet)
580 | {
581 | if (dictionaryEntry.Value is string)
582 | {
583 | TemplateFile.WriteStringValue(
584 | dictionaryEntry.Key.ToString(),
585 | dictionaryEntry.Value.ToString());
586 | }
587 | }
588 | }
589 |
590 | public void TranslateForm(Form form)
591 | {
592 | TemplateFile.CurrentSection = form.Name;
593 | _TranslateControl(form, KeyFormTitle);
594 |
595 | foreach (Control control in form.Controls)
596 | {
597 | TranslateControl(control);
598 | }
599 | }
600 |
601 | private void TranslateControl(Control control)
602 | {
603 | _TranslateControl(control);
604 |
605 | foreach (Control subControl in control.Controls)
606 | {
607 | TranslateControl(subControl);
608 | }
609 |
610 | SpecialControlTr[] specialControlTrs = new SpecialControlTr[]
611 | {
612 | new SpecialControlTr
613 | {
614 | controlType = typeof(ToolStrip),
615 | trControl = TranslateToolStrip
616 | },
617 | new SpecialControlTr
618 | {
619 | controlType = typeof(ComboBox),
620 | trControl = TranslateComboBox
621 | },
622 | new SpecialControlTr
623 | {
624 | controlType = typeof(CheckedListBox),
625 | trControl = TranslateCheckedListBox
626 | },
627 | };
628 |
629 | foreach (SpecialControlTr sTr in specialControlTrs)
630 | {
631 | if (control.GetType() == sTr.controlType)
632 | {
633 | sTr.trControl(control);
634 | break;
635 | }
636 | }
637 | }
638 |
639 | private void _TranslateControl(Control control)
640 | {
641 | _TranslateControl(control, control.Name);
642 | }
643 |
644 | private void _TranslateControl(Control control, string id)
645 | {
646 | string translation = TemplateFile.ReadStringValue(id, 1024);
647 |
648 | if (!String.IsNullOrEmpty(translation))
649 | {
650 | control.Text = translation;
651 | }
652 | }
653 |
654 | private void TranslateToolStrip(Control control)
655 | {
656 | ToolStrip toolStrip = control as ToolStrip;
657 |
658 | if (toolStrip != null)
659 | {
660 | foreach (ToolStripItem item in toolStrip.Items)
661 | {
662 | TranslateToolStripItem(item);
663 | }
664 | }
665 | }
666 |
667 | private void TranslateToolStripItem(ToolStripItem item)
668 | {
669 | TranslateToolStripItem(item, item.Name);
670 | }
671 |
672 | private void TranslateToolStripItem(ToolStripItem item, string id)
673 | {
674 | string translation = TemplateFile.ReadStringValue(id, 1024);
675 |
676 | if (!String.IsNullOrEmpty(translation))
677 | {
678 | item.Text = translation;
679 | }
680 |
681 | if (item is ToolStripComboBox)
682 | {
683 | ToolStripComboBox comboBox = item as ToolStripComboBox;
684 | for (int i = 0; i < comboBox.Items.Count; ++i)
685 | {
686 | comboBox.Items[i] = Tr(comboBox.Items[i] as string);
687 | }
688 | }
689 | }
690 |
691 | private void TranslateComboBox(Control control)
692 | {
693 | ComboBox comboBox = control as ComboBox;
694 |
695 | if (comboBox == null || comboBox.Items == null)
696 | {
697 | return;
698 | }
699 |
700 | for (int i = 0; i < comboBox.Items.Count; ++i)
701 | {
702 | comboBox.Items[i] = Tr(comboBox.Items[i] as string);
703 | }
704 | }
705 |
706 | private void TranslateCheckedListBox(Control control)
707 | {
708 | CheckedListBox checkedListBox = control as CheckedListBox;
709 |
710 | if (checkedListBox == null || checkedListBox.Items == null)
711 | {
712 | return;
713 | }
714 |
715 | for (int i = 0; i < checkedListBox.Items.Count; ++i)
716 | {
717 | checkedListBox.Items[i] = Tr(checkedListBox.Items[i] as string);
718 | }
719 | }
720 |
721 | public string Tr(string s)
722 | {
723 | if (!IsValidate || String.IsNullOrEmpty(s))
724 | {
725 | return s;
726 | }
727 |
728 | if (cacheEnabled)
729 | {
730 | trStrResCacheLock.EnterReadLock();
731 |
732 | try
733 | {
734 | if (trStrResCache.ContainsKey(s))
735 | {
736 | return trStrResCache[s];
737 | }
738 | }
739 | finally
740 | {
741 | trStrResCacheLock.ExitReadLock();
742 | }
743 | }
744 |
745 | //
746 | // issue#3: Reported by @JueLuo99 at github.com.
747 | // Use CultureInfo.InvariantCulture instead of
748 | // CultureInfo.CurrentCulture when call
749 | // ResourceManager.GetResourceSet, because
750 | // ResourceManager.GetResourceSet may return
751 | // null which is influenced by the language
752 | // setting of OS.
753 | //
754 | ResourceSet resourceSet = Properties.Resources.ResourceManager.GetResourceSet(
755 | CultureInfo.InvariantCulture, true, false);
756 |
757 | string trS = (from DictionaryEntry r in resourceSet
758 | where r.Value is string
759 | && s.Equals((r.Value as string).Replace("\r\n", "\n"))
760 | select TrId(r.Key.ToString())).DefaultIfEmpty(s).First();
761 |
762 | if (cacheEnabled)
763 | {
764 | trStrResCacheLock.EnterWriteLock();
765 |
766 | try
767 | {
768 | trStrResCache.Add(s, trS);
769 | }
770 | finally
771 | {
772 | trStrResCacheLock.ExitWriteLock();
773 | }
774 | }
775 | return trS;
776 | }
777 |
778 | private string TrId(string id)
779 | {
780 | string s = TemplateFile.ReadStringValue(SectionResource, id, 1024);
781 |
782 | if (String.IsNullOrEmpty(s))
783 | {
784 | return Properties.Resources.ResourceManager.GetString(id);
785 | }
786 |
787 | return s;
788 | }
789 | }
790 |
791 | class IniFile
792 | {
793 | public string FileName
794 | {
795 | get;
796 | protected set;
797 | }
798 |
799 | public string CurrentSection
800 | {
801 | get;
802 | set;
803 | }
804 |
805 | public IniFile(string iniFile)
806 | {
807 | FileName = iniFile;
808 | }
809 |
810 | public bool WriteStringValue(string key, string value)
811 | {
812 | return WriteStringValue(CurrentSection, key, value);
813 | }
814 |
815 | public bool WriteStringValue(string section, string key, string value)
816 | {
817 | return Win32Native.WritePrivateProfileString(
818 | section,
819 | key,
820 | value.Replace("\r", "\\r").Replace("\n", "\\n"),
821 | FileName);
822 | }
823 |
824 | public string ReadStringValue(string key, int maxLength, string defaultValue = "")
825 | {
826 | return ReadStringValue(CurrentSection, key, maxLength, defaultValue);
827 | }
828 |
829 | public string ReadStringValue(string section, string key, int maxLength, string defaultValue = "")
830 | {
831 | StringBuilder buffer = new StringBuilder(maxLength);
832 | buffer.Length = maxLength;
833 | string value = buffer.ToString(0, maxLength);
834 | int length = (int)Win32Native.GetPrivateProfileString(
835 | section,
836 | key,
837 | defaultValue,
838 | value,
839 | (uint)maxLength,
840 | FileName);
841 | return value.Substring(0, length)
842 | .Replace("\\r", "\r")
843 | .Replace("\\n", "\n");
844 | }
845 |
846 | public string[] GetSections()
847 | {
848 | string value = new StringBuilder(65535).ToString(0, 65535);
849 | if (Win32Native.GetPrivateProfileString(null, null, "", value, 65535, FileName) != 0)
850 | {
851 | return StringsFromMultiString(value);
852 | }
853 |
854 | return new string[0];
855 | }
856 |
857 | private static string[] StringsFromMultiString(string s)
858 | {
859 | string[] raw = s.Split('\0');
860 | return raw.Take(raw.Length - 2).ToArray();
861 | }
862 | }
863 |
864 | class TitleIdMap
865 | {
866 | public static Dictionary BuildIdMap()
867 | {
868 | Dictionary result = new Dictionary();
869 |
870 | // McAfee dislikes ids.csv...
871 | using (var stream = new MemoryStream(Properties.Resources.ids))
872 | using (var reader = new StreamReader(stream))
873 | {
874 | while (!reader.EndOfStream)
875 | {
876 | string line = reader.ReadLine();
877 | string[] ids = line.Split(',');
878 | foreach(string id in ids)
879 | {
880 | string[] mappedIds = ids.Where(val => val != id).ToArray();
881 | result.Add(id, mappedIds);
882 | }
883 | }
884 | }
885 |
886 | return result;
887 | }
888 | }
889 |
890 | class Resources
891 | {
892 | public static Stream getResouceStream(string fileName)
893 | {
894 | string resourceName = Assembly.GetExecutingAssembly().GetManifestResourceNames().Single(str => str.EndsWith("Resources." + fileName));
895 | return Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName);
896 | }
897 | }
898 |
899 | class Fonts
900 | {
901 | public static PrivateFontCollection craeteNewFontCollection(string fontName)
902 | {
903 | PrivateFontCollection result = new PrivateFontCollection();
904 | using (var stream = Resources.getResouceStream(fontName))
905 | {
906 | IntPtr data = Marshal.AllocCoTaskMem((int)stream.Length);
907 | byte[] fontdata = new byte[stream.Length];
908 | stream.Read(fontdata, 0, (int)stream.Length);
909 | Marshal.Copy(fontdata, 0, data, (int)stream.Length);
910 | result.AddMemoryFont(data, (int)stream.Length);
911 | }
912 |
913 | return result;
914 | }
915 | }
916 |
917 | class Misc
918 | {
919 | public static string NormalizePath(string path)
920 | {
921 | return Path.GetFullPath(new Uri(path).LocalPath)
922 | .TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar);
923 | }
924 |
925 | public static bool PathEquals(string path1, string path2, bool fsCaseInsensitive = true)
926 | {
927 | string canonicalName1 = NormalizePath(path1);
928 | string canonicalName2 = NormalizePath(path2);
929 |
930 | return canonicalName1.Equals(
931 | canonicalName2,
932 | fsCaseInsensitive
933 | ? StringComparison.OrdinalIgnoreCase
934 | : StringComparison.Ordinal);
935 | }
936 |
937 | public static string GetLengthString(long length)
938 | {
939 | // >= 1GB
940 | if (length >= 1024 * 1024 * 1024)
941 | {
942 | return $"{length / 1024.0 / 1024.0 / 1024.0:0.##} GB";
943 | }
944 |
945 | // >= 1MB
946 | if (length >= 1024 * 1024)
947 | {
948 | return $"{length / 1024.0 / 1024.0:0.##} MB";
949 | }
950 |
951 | // >= 1KB
952 | if (length >= 1024)
953 | {
954 | return $"{length / 1024.0:0.##} KB";
955 | }
956 |
957 | return $"{length} Bytes";
958 | }
959 | }
960 | }
961 | }
--------------------------------------------------------------------------------
/TeconMoon's WiiVC Injector/WiiU.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timefox/TeconMoon-s-WiiVC-Injector-Mod/5fe2b874ca2f05a266bb51cc0f6f58709d71fd90/TeconMoon's WiiVC Injector/WiiU.ico
--------------------------------------------------------------------------------
/TeconMoon's WiiVC Injector/Win32Native.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Runtime.InteropServices;
3 |
4 | namespace TeconMoon_s_WiiVC_Injector
5 | {
6 | class Win32Native
7 | {
8 | [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
9 | internal static extern bool WritePrivateProfileString(
10 | string lpAppName, string lpKeyName, string lpString, string lpFileName);
11 |
12 | [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
13 | internal static extern uint GetPrivateProfileString(
14 | string lpAppName, string lpKeyName, string lpDefault, string lpReturnedString,
15 | uint nSize, string lpFileName);
16 |
17 | [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
18 | internal static extern IntPtr LockWindowUpdate(IntPtr Handle);
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/nintendontvalues.txt:
--------------------------------------------------------------------------------
1 | Nintendont Config Offsets
2 | (overlapping values seem to just be added together)
3 |
4 | 09:
5 | 01 = triforce mode
6 | 02 = Wii Remote Rumble
7 | 04 = skip ipl
8 |
9 | 0A-0C: Options
10 | 000000 = None
11 | 000100 = Cheats
12 | 000801 = Memcard Emu
13 | 200000 = Memcard Multi (Requires Memcard Emu)
14 | 001001 = Cheat Path
15 | 002001 = Force Widescreen
16 | 004003 = Force Progressive
17 | 010004 = Unlock Read Speed
18 | 020004 = OSReport
19 | 800004 = WiiU Widescreen
20 | 100012 = Log
21 |
22 | 0D: Video
23 | 00 = Auto
24 | 01 = Force
25 | 05 = Force (Deflicker)
26 | 02 = None
27 |
28 | 0F: Video Modes
29 | 10 = None (When not using Force options)
30 | 14 = NTSC
31 | 18 = MPAL
32 | 11 = PAL50
33 | 12 = PAL60
34 | 20 = Patch PAL50 (Add when mixed with a forced video mode)
35 | 34 = Example: NTSC + Patch Pal50
36 |
37 |
38 | 10-13: Language
39 | 0000 = English
40 | 0001 = German
41 | 0002 = French
42 | 0003 = Spanish
43 | 0004 = Italian
44 | 0005 = Dutch
45 | FFFF = Auto
46 |
47 | 21C: Memcard Blocks
48 | 00 = 59
49 | 01 = 123
50 | 02 = 251
51 | 03 = 507 (Unstable)
52 | 04 = 1019 (Unstable)
53 | 05 = 2043 (Unstable)
54 |
55 | 21D: Video Width
56 | 00 = Auto
57 | 28 = 640
58 | 78 = 720
59 |
60 | 21E: Video Offset (won't use)
61 | EC: -20
62 | ED: -19
63 | EE: -18
64 | EF: -17
65 | F0: -16
66 | F1: -15
67 | F2: -14
68 | F3: -13
69 | F4: -12
70 | F5: -11
71 | F6: -10
72 | F7: -09
73 | F8: -08
74 | F9: -07
75 | FA: -06
76 | FB: -05
77 | FC: -04
78 | FD: -03
79 | FE: -02
80 | FF: -01
81 | 00: +00
82 | 01: +01
83 | 02: +02
84 | 03: +03
85 | 04: +04
86 | 05: +05
87 | 06: +06
88 | 07: +07
89 | 08: +08
90 | 09: +09
91 | 0A: +10
92 | 0B: +11
93 | 0C: +12
94 | 0D: +13
95 | 0E: +14
96 | 0F: +15
97 | 10: +16
98 | 11: +17
99 | 12: +18
100 | 13: +19
101 | 14: +20
--------------------------------------------------------------------------------