├── .editorconfig
├── .gitattributes
├── .gitignore
├── .gitmodules
├── BuildScript.ini
├── MusicConfigTool
├── ListDialog.Designer.cs
├── ListDialog.cs
├── ListDialog.resx
├── MainForm.Designer.cs
├── MainForm.cs
├── MainForm.resx
├── MusicConfigTool.csproj
├── Program.cs
├── Properties
│ ├── AssemblyInfo.cs
│ ├── Resources.Designer.cs
│ ├── Resources.resx
│ ├── Settings.Designer.cs
│ └── Settings.settings
└── opts.ini
├── README.markdown
├── SKCModLoader.sln
├── SKCModLoader
├── FramerateFix.cpp
├── FramerateFix.h
├── MidiInterface.cpp
├── MidiInterface.h
├── PaletteFix.cpp
├── PaletteFix.h
├── ReadMe.txt
├── SEGA.wav
├── SKCModLoader.h
├── SKCModLoader.rc
├── SKCModLoader.vcxproj
├── SKCModLoader.vcxproj.filters
├── cpp.hint
├── dllmain.cpp
├── midis
│ ├── FM_00_S3_Title.mid
│ ├── FM_01_AIZ_1.mid
│ ├── FM_02_AIZ_2.mid
│ ├── FM_03_HCZ_1.mid
│ ├── FM_04_HCZ_2.mid
│ ├── FM_05_MGZ_1.mid
│ ├── FM_06_MGZ_2.mid
│ ├── FM_07_CNZ_1.mid
│ ├── FM_08_CNZ_2.mid
│ ├── FM_09_FBZ_1.mid
│ ├── FM_10_FBZ_2.mid
│ ├── FM_11_ICZ_1.mid
│ ├── FM_12_ICZ_2.mid
│ ├── FM_13_LBZ_1.mid
│ ├── FM_14_LBZ_2.mid
│ ├── FM_15_MHZ_1.mid
│ ├── FM_16_MHZ_2.mid
│ ├── FM_17_SZ_1.mid
│ ├── FM_18_SZ_2.mid
│ ├── FM_19_LRZ_1.mid
│ ├── FM_20_LRZ_2_HPZ.mid
│ ├── FM_21_SSZ.mid
│ ├── FM_22_DEZ_1.mid
│ ├── FM_23_DEZ_2.mid
│ ├── FM_24_Act_1_Boss.mid
│ ├── FM_25_Act_2_Boss.mid
│ ├── FM_26_DDZ.mid
│ ├── FM_27_Glowing_Sphere.mid
│ ├── FM_28_Special.mid
│ ├── FM_29_Slot.mid
│ ├── FM_30_Gumball.mid
│ ├── FM_31_S3_Knuckles.mid
│ ├── FM_32_2P_ALZ.mid
│ ├── FM_33_2P_BPZ.mid
│ ├── FM_34_2P_DPZ.mid
│ ├── FM_35_2P_CGZ.mid
│ ├── FM_36_2P_EMZ.mid
│ ├── FM_37_Game_Over.mid
│ ├── FM_38_Results.mid
│ ├── FM_39_Act_Clear.mid
│ ├── FM_40_S3_Life.mid
│ ├── FM_41_Emerald.mid
│ ├── FM_42_S3_Invinc.mid
│ ├── FM_43_2P_Menu.mid
│ ├── FM_44_Unused.mid
│ ├── FM_45_Options.mid
│ ├── FM_46_Final_Boss.mid
│ ├── FM_47_Timer.mid
│ ├── FM_48_S3_Clear.mid
│ ├── FM_49_S3_Credits.mid
│ ├── FM_50_S3K_Knuckles.mid
│ ├── FM_51_S3K_Title.mid
│ ├── FM_52_S3K_Life.mid
│ ├── FM_53_S3K_Invinc.mid
│ ├── FM_54_S3K_Clear.mid
│ ├── FM_55_S3K_Credits.mid
│ ├── GM_00_S3_Title.mid
│ ├── GM_01_AIZ_1.mid
│ ├── GM_02_AIZ_2.mid
│ ├── GM_03_HCZ_1.mid
│ ├── GM_04_HCZ_2.mid
│ ├── GM_05_MGZ_1.mid
│ ├── GM_06_MGZ_2.mid
│ ├── GM_07_CNZ_1.mid
│ ├── GM_08_CNZ_2.mid
│ ├── GM_09_FBZ_1.mid
│ ├── GM_10_FBZ_2.mid
│ ├── GM_11_ICZ_1.mid
│ ├── GM_12_ICZ_2.mid
│ ├── GM_13_LBZ_1.mid
│ ├── GM_14_LBZ_2.mid
│ ├── GM_15_MHZ_1.mid
│ ├── GM_16_MHZ_2.mid
│ ├── GM_17_SZ_1.mid
│ ├── GM_18_SZ_2.mid
│ ├── GM_19_LRZ_1.mid
│ ├── GM_20_LRZ_2_HPZ.mid
│ ├── GM_21_SSZ.mid
│ ├── GM_22_DEZ_1.mid
│ ├── GM_23_DEZ_2.mid
│ ├── GM_24_Act_1_Boss.mid
│ ├── GM_25_Act_2_Boss.mid
│ ├── GM_26_DDZ.mid
│ ├── GM_27_Glowing_Sphere.mid
│ ├── GM_28_Special.mid
│ ├── GM_29_Slot.mid
│ ├── GM_30_Gumball.mid
│ ├── GM_31_S3_Knuckles.mid
│ ├── GM_32_2P_ALZ.mid
│ ├── GM_33_2P_BPZ.mid
│ ├── GM_34_2P_DPZ.mid
│ ├── GM_35_2P_CGZ.mid
│ ├── GM_36_2P_EMZ.mid
│ ├── GM_37_Game_Over.mid
│ ├── GM_38_Results.mid
│ ├── GM_39_Act_Clear.mid
│ ├── GM_40_S3_Life.mid
│ ├── GM_41_Emerald.mid
│ ├── GM_42_S3_Invinc.mid
│ ├── GM_43_2P_Menu.mid
│ ├── GM_44_Unused.mid
│ ├── GM_45_Options.mid
│ ├── GM_46_Final_Boss.mid
│ ├── GM_47_Timer.mid
│ ├── GM_48_S3_Clear.mid
│ ├── GM_49_S3_Credits.mid
│ ├── GM_50_S3K_Knuckles.mid
│ ├── GM_51_S3K_Title.mid
│ ├── GM_52_S3K_Life.mid
│ ├── GM_53_S3K_Invinc.mid
│ ├── GM_54_S3K_Clear.mid
│ └── GM_55_S3K_Credits.mid
├── resource.h
├── stdafx.cpp
├── stdafx.h
└── targetver.h
├── SKCModManager
├── App.config
├── LoaderInfo.cs
├── MainForm.Designer.cs
├── MainForm.cs
├── MainForm.resx
├── ModInfo.cs
├── NewModDialog.Designer.cs
├── NewModDialog.cs
├── NewModDialog.resx
├── Program.cs
├── Properties
│ ├── AssemblyInfo.cs
│ ├── Resources.Designer.cs
│ ├── Resources.resx
│ ├── Settings.Designer.cs
│ └── Settings.settings
├── SKCModManager.csproj
└── SONIC3K.ICO
├── data
├── Codes.lst
└── OPL-3_FM_128M.sf2
├── extlib
├── bass
│ ├── COPYING_BASS_VGMSTREAM
│ ├── COPYING_VGMSTREAM
│ ├── avcodec-vgmstream-58.dll
│ ├── avformat-vgmstream-58.dll
│ ├── avutil-vgmstream-56.dll
│ ├── bass.dll
│ ├── bass.h
│ ├── bass.lib
│ ├── bass_fx.dll
│ ├── bass_fx.h
│ ├── bass_fx.lib
│ ├── bass_vgmstream.dll
│ ├── bass_vgmstream.h
│ ├── bass_vgmstream.lib
│ ├── bassflac.dll
│ ├── bassmidi.dll
│ ├── bassmidi.h
│ ├── bassmidi.lib
│ ├── libatrac9.dll
│ ├── libcelt-0061.dll
│ ├── libcelt-0110.dll
│ ├── libg719_decode.dll
│ ├── libg7221_decode.dll
│ ├── libmpg123-0.dll
│ ├── libogg.dll
│ ├── libvorbis.dll
│ └── libvorbisfile.dll
└── smpsplay-dll
│ ├── SMPSPlay.dll
│ ├── SMPSPlay.h
│ ├── SMPSPlay.lib
│ └── musicid.gen.h
└── mods
├── MIDIMusic
├── Music
│ └── Music.ini
└── mod.ini
├── SMPS_ByCharacterThemes
├── Music
│ └── Music.ini
└── mod.ini
├── SMPS_ByZoneThemes
├── Music
│ └── Music.ini
└── mod.ini
├── SMPS_PCThemes
├── Music
│ └── Music.ini
└── mod.ini
├── SMPS_ProtoThemes
├── Music
│ └── Music.ini
└── mod.ini
└── SMPS_S3Themes
├── Music
└── Music.ini
└── mod.ini
/.editorconfig:
--------------------------------------------------------------------------------
1 | root=true
2 | [*.{cs,c,h,cpp,hpp}]
3 | indent_style=tab
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 | # Custom for Visual Studio
4 | *.cs diff=csharp
5 | # Standard to msysgit
6 | *.doc diff=astextplain
7 | *.DOC diff=astextplain
8 | *.docx diff=astextplain
9 | *.DOCX diff=astextplain
10 | *.dot diff=astextplain
11 | *.DOT diff=astextplain
12 | *.pdf diff=astextplain
13 | *.PDF diff=astextplain
14 | *.rtf diff=astextplain
15 | *.RTF diff=astextplain
16 | data/OPL-3_FM_128M.sf2 filter=lfs diff=lfs merge=lfs -text
17 |
--------------------------------------------------------------------------------
/.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
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "mod-loader-common"]
2 | path = mod-loader-common
3 | url = https://github.com/sonicretro/mod-loader-common.git
4 |
--------------------------------------------------------------------------------
/BuildScript.ini:
--------------------------------------------------------------------------------
1 | 7z.exe=Release\\7z.exe
2 | 7z.dll=Release\\7z.dll
3 | bass.dll=extlib\\bass\\bass.dll
4 | bass_fx.dll=extlib\\bass\\bass_fx.dll
5 | bass_vgmstream.dll=extlib\\bass\\bass_vgmstream.dll
6 | bassmidi.dll=extlib\\bass\\bassmidi.dll
7 | bassflac.dll=extlib\\bass\\bassflac.dll
8 | COPYING_BASS_VGMSTREAM=extlib\\bass\\COPYING_BASS_VGMSTREAM
9 | COPYING_VGMSTREAM=extlib\\bass\\COPYING_VGMSTREAM
10 | avcodec-vgmstream-58.dll=extlib\\bass\\avcodec-vgmstream-58.dll
11 | avformat-vgmstream-58.dll=extlib\\bass\\avformat-vgmstream-58.dll
12 | avutil-vgmstream-56.dll=extlib\\bass\\avutil-vgmstream-56.dll
13 | libatrac9.dll=extlib\\bass\\libatrac9.dll
14 | libcelt-0061.dll=extlib\\bass\\libcelt-0061.dll
15 | libcelt-0110.dll=extlib\\bass\\libcelt-0110.dll
16 | libg719_decode.dll=extlib\\bass\\libg719_decode.dll
17 | libg7221_decode.dll=extlib\\bass\\libg7221_decode.dll
18 | libmpg123-0.dll=extlib\\bass\\libmpg123-0.dll
19 | libogg.dll=extlib\\bass\\libogg.dll
20 | libvorbis.dll=extlib\\bass\\libvorbis.dll
21 | libvorbisfile.dll=extlib\\bass\\libvorbisfile.dll
22 | SMPSPlay.dll=extlib\\smpsplay-dll\\SMPSPlay.dll
23 | SKCModManager.exe=Release\\SKCModManager.exe
24 | SKCModManager.exe.config=Release\\SKCModManager.exe.config
25 | SKCModManager.pdb=Release\\SKCModManager.pdb
26 | Newtonsoft.Json.dll=Release\\Newtonsoft.Json.dll
27 | ModManagerCommon.dll=Release\\ModManagerCommon.dll
28 | ModManagerCommon.pdb=Release\\ModManagerCommon.pdb
29 | mods=mods
30 | mods\\Codes.lst=data\\Codes.lst
31 | mods\\SKCModLoader.dll=Release\\SKCModLoader.dll
32 | Music\\MusicConfigTool.exe=Release\\MusicConfigTool.exe
33 | Music\\MusicConfigTool.pdb=Release\\MusicConfigTool.pdb
34 | Music\\ModManagerCommon.dll=Release\\ModManagerCommon.dll
35 | Music\\ModManagerCommon.pdb=Release\\ModManagerCommon.pdb
36 | Music\\opts.ini=Release\\opts.ini
37 | Music\\OPL-3_FM_128M.sf2=data\\OPL-3_FM_128M.sf2
38 | programming\\SKCModLoader.h=SKCModLoader\\SKCModLoader.h
39 |
--------------------------------------------------------------------------------
/MusicConfigTool/ListDialog.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace MusicConfigTool
2 | {
3 | partial class ListDialog
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 | this.listBox1 = new System.Windows.Forms.ListBox();
32 | this.SuspendLayout();
33 | //
34 | // listBox1
35 | //
36 | this.listBox1.Dock = System.Windows.Forms.DockStyle.Fill;
37 | this.listBox1.FormattingEnabled = true;
38 | this.listBox1.Location = new System.Drawing.Point(0, 0);
39 | this.listBox1.Margin = new System.Windows.Forms.Padding(0, 0, 0, 3);
40 | this.listBox1.Name = "listBox1";
41 | this.listBox1.Size = new System.Drawing.Size(284, 261);
42 | this.listBox1.TabIndex = 0;
43 | this.listBox1.DoubleClick += new System.EventHandler(this.listBox1_DoubleClick);
44 | this.listBox1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.listBox1_KeyDown);
45 | //
46 | // ListDialog
47 | //
48 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
49 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
50 | this.ClientSize = new System.Drawing.Size(284, 261);
51 | this.Controls.Add(this.listBox1);
52 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
53 | this.MaximizeBox = false;
54 | this.MinimizeBox = false;
55 | this.Name = "ListDialog";
56 | this.ShowIcon = false;
57 | this.ShowInTaskbar = false;
58 | this.Text = "List";
59 | this.Load += new System.EventHandler(this.ListDialog_Load);
60 | this.ResumeLayout(false);
61 |
62 | }
63 |
64 | #endregion
65 |
66 | private System.Windows.Forms.ListBox listBox1;
67 | }
68 | }
--------------------------------------------------------------------------------
/MusicConfigTool/ListDialog.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Windows.Forms;
5 |
6 | namespace MusicConfigTool
7 | {
8 | public partial class ListDialog : Form
9 | {
10 | IList items;
11 |
12 | public ListDialog(IList items)
13 | {
14 | InitializeComponent();
15 | this.items = items;
16 | }
17 |
18 | private void ListDialog_Load(object sender, EventArgs e)
19 | {
20 | listBox1.Items.AddRange(items.ToArray());
21 | }
22 |
23 | private void listBox1_DoubleClick(object sender, EventArgs e)
24 | {
25 | DialogResult = DialogResult.OK;
26 | Close();
27 | }
28 |
29 | private void listBox1_KeyDown(object sender, KeyEventArgs e)
30 | {
31 | if (e.KeyCode == Keys.Enter)
32 | {
33 | DialogResult = DialogResult.OK;
34 | Close();
35 | }
36 | }
37 |
38 | public string SelectedItem => (string)listBox1.SelectedItem;
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/MusicConfigTool/ListDialog.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 |
--------------------------------------------------------------------------------
/MusicConfigTool/MainForm.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace MusicConfigTool
2 | {
3 | partial class MainForm
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.Windows.Forms.Label label1;
32 | System.Windows.Forms.Button soundfontBrowseButton;
33 | this.tabControl1 = new System.Windows.Forms.TabControl();
34 | this.tabPage5 = new System.Windows.Forms.TabPage();
35 | this.soundfontTextBox = new System.Windows.Forms.TextBox();
36 | this.tabPage1 = new System.Windows.Forms.TabPage();
37 | this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
38 | this.tabPage2 = new System.Windows.Forms.TabPage();
39 | this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();
40 | this.tabPage3 = new System.Windows.Forms.TabPage();
41 | this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel();
42 | this.tabPage4 = new System.Windows.Forms.TabPage();
43 | this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel();
44 | this.menuStrip1 = new System.Windows.Forms.MenuStrip();
45 | this.editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
46 | this.setAllToDefaultToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
47 | this.setAllToMIDIToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
48 | label1 = new System.Windows.Forms.Label();
49 | soundfontBrowseButton = new System.Windows.Forms.Button();
50 | this.tabControl1.SuspendLayout();
51 | this.tabPage5.SuspendLayout();
52 | this.tabPage1.SuspendLayout();
53 | this.tabPage2.SuspendLayout();
54 | this.tabPage3.SuspendLayout();
55 | this.tabPage4.SuspendLayout();
56 | this.menuStrip1.SuspendLayout();
57 | this.SuspendLayout();
58 | //
59 | // label1
60 | //
61 | label1.AutoSize = true;
62 | label1.Location = new System.Drawing.Point(8, 11);
63 | label1.Name = "label1";
64 | label1.Size = new System.Drawing.Size(85, 13);
65 | label1.TabIndex = 0;
66 | label1.Text = "MIDI Soundfont:";
67 | //
68 | // soundfontBrowseButton
69 | //
70 | soundfontBrowseButton.AutoSize = true;
71 | soundfontBrowseButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
72 | soundfontBrowseButton.Location = new System.Drawing.Point(305, 6);
73 | soundfontBrowseButton.Name = "soundfontBrowseButton";
74 | soundfontBrowseButton.Size = new System.Drawing.Size(26, 23);
75 | soundfontBrowseButton.TabIndex = 2;
76 | soundfontBrowseButton.Text = "...";
77 | soundfontBrowseButton.UseVisualStyleBackColor = true;
78 | soundfontBrowseButton.Click += new System.EventHandler(this.soundfontBrowseButton_Click);
79 | //
80 | // tabControl1
81 | //
82 | this.tabControl1.Controls.Add(this.tabPage5);
83 | this.tabControl1.Controls.Add(this.tabPage1);
84 | this.tabControl1.Controls.Add(this.tabPage2);
85 | this.tabControl1.Controls.Add(this.tabPage3);
86 | this.tabControl1.Controls.Add(this.tabPage4);
87 | this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill;
88 | this.tabControl1.Location = new System.Drawing.Point(0, 24);
89 | this.tabControl1.Name = "tabControl1";
90 | this.tabControl1.SelectedIndex = 0;
91 | this.tabControl1.Size = new System.Drawing.Size(584, 538);
92 | this.tabControl1.TabIndex = 0;
93 | //
94 | // tabPage5
95 | //
96 | this.tabPage5.Controls.Add(soundfontBrowseButton);
97 | this.tabPage5.Controls.Add(this.soundfontTextBox);
98 | this.tabPage5.Controls.Add(label1);
99 | this.tabPage5.Location = new System.Drawing.Point(4, 22);
100 | this.tabPage5.Name = "tabPage5";
101 | this.tabPage5.Padding = new System.Windows.Forms.Padding(3);
102 | this.tabPage5.Size = new System.Drawing.Size(576, 512);
103 | this.tabPage5.TabIndex = 4;
104 | this.tabPage5.Text = "Settings";
105 | this.tabPage5.UseVisualStyleBackColor = true;
106 | //
107 | // soundfontTextBox
108 | //
109 | this.soundfontTextBox.Location = new System.Drawing.Point(99, 8);
110 | this.soundfontTextBox.Name = "soundfontTextBox";
111 | this.soundfontTextBox.Size = new System.Drawing.Size(200, 20);
112 | this.soundfontTextBox.TabIndex = 1;
113 | this.soundfontTextBox.TextChanged += new System.EventHandler(this.soundfontTextBox_TextChanged);
114 | //
115 | // tabPage1
116 | //
117 | this.tabPage1.AutoScroll = true;
118 | this.tabPage1.Controls.Add(this.tableLayoutPanel1);
119 | this.tabPage1.Location = new System.Drawing.Point(4, 22);
120 | this.tabPage1.Name = "tabPage1";
121 | this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
122 | this.tabPage1.Size = new System.Drawing.Size(576, 512);
123 | this.tabPage1.TabIndex = 0;
124 | this.tabPage1.Text = "All";
125 | this.tabPage1.UseVisualStyleBackColor = true;
126 | //
127 | // tableLayoutPanel1
128 | //
129 | this.tableLayoutPanel1.AutoSize = true;
130 | this.tableLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
131 | this.tableLayoutPanel1.ColumnCount = 4;
132 | this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
133 | this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
134 | this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
135 | this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
136 | this.tableLayoutPanel1.Location = new System.Drawing.Point(6, 6);
137 | this.tableLayoutPanel1.Name = "tableLayoutPanel1";
138 | this.tableLayoutPanel1.RowCount = 1;
139 | this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
140 | this.tableLayoutPanel1.Size = new System.Drawing.Size(0, 0);
141 | this.tableLayoutPanel1.TabIndex = 0;
142 | //
143 | // tabPage2
144 | //
145 | this.tabPage2.AutoScroll = true;
146 | this.tabPage2.Controls.Add(this.tableLayoutPanel2);
147 | this.tabPage2.Location = new System.Drawing.Point(4, 22);
148 | this.tabPage2.Name = "tabPage2";
149 | this.tabPage2.Padding = new System.Windows.Forms.Padding(3);
150 | this.tabPage2.Size = new System.Drawing.Size(576, 512);
151 | this.tabPage2.TabIndex = 1;
152 | this.tabPage2.Text = "Sonic 3 & Knuckles";
153 | this.tabPage2.UseVisualStyleBackColor = true;
154 | //
155 | // tableLayoutPanel2
156 | //
157 | this.tableLayoutPanel2.AutoSize = true;
158 | this.tableLayoutPanel2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
159 | this.tableLayoutPanel2.ColumnCount = 4;
160 | this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
161 | this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
162 | this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
163 | this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
164 | this.tableLayoutPanel2.Location = new System.Drawing.Point(6, 6);
165 | this.tableLayoutPanel2.Name = "tableLayoutPanel2";
166 | this.tableLayoutPanel2.RowCount = 1;
167 | this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle());
168 | this.tableLayoutPanel2.Size = new System.Drawing.Size(0, 0);
169 | this.tableLayoutPanel2.TabIndex = 1;
170 | //
171 | // tabPage3
172 | //
173 | this.tabPage3.AutoScroll = true;
174 | this.tabPage3.Controls.Add(this.tableLayoutPanel3);
175 | this.tabPage3.Location = new System.Drawing.Point(4, 22);
176 | this.tabPage3.Name = "tabPage3";
177 | this.tabPage3.Padding = new System.Windows.Forms.Padding(3);
178 | this.tabPage3.Size = new System.Drawing.Size(576, 512);
179 | this.tabPage3.TabIndex = 2;
180 | this.tabPage3.Text = "Sonic 3";
181 | this.tabPage3.UseVisualStyleBackColor = true;
182 | //
183 | // tableLayoutPanel3
184 | //
185 | this.tableLayoutPanel3.AutoSize = true;
186 | this.tableLayoutPanel3.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
187 | this.tableLayoutPanel3.ColumnCount = 4;
188 | this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
189 | this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
190 | this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
191 | this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
192 | this.tableLayoutPanel3.Location = new System.Drawing.Point(6, 6);
193 | this.tableLayoutPanel3.Name = "tableLayoutPanel3";
194 | this.tableLayoutPanel3.RowCount = 1;
195 | this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle());
196 | this.tableLayoutPanel3.Size = new System.Drawing.Size(0, 0);
197 | this.tableLayoutPanel3.TabIndex = 1;
198 | //
199 | // tabPage4
200 | //
201 | this.tabPage4.AutoScroll = true;
202 | this.tabPage4.Controls.Add(this.tableLayoutPanel4);
203 | this.tabPage4.Location = new System.Drawing.Point(4, 22);
204 | this.tabPage4.Name = "tabPage4";
205 | this.tabPage4.Padding = new System.Windows.Forms.Padding(3);
206 | this.tabPage4.Size = new System.Drawing.Size(576, 512);
207 | this.tabPage4.TabIndex = 3;
208 | this.tabPage4.Text = "Sonic & Knuckles";
209 | this.tabPage4.UseVisualStyleBackColor = true;
210 | //
211 | // tableLayoutPanel4
212 | //
213 | this.tableLayoutPanel4.AutoSize = true;
214 | this.tableLayoutPanel4.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
215 | this.tableLayoutPanel4.ColumnCount = 4;
216 | this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
217 | this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
218 | this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
219 | this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
220 | this.tableLayoutPanel4.Location = new System.Drawing.Point(6, 6);
221 | this.tableLayoutPanel4.Name = "tableLayoutPanel4";
222 | this.tableLayoutPanel4.RowCount = 1;
223 | this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle());
224 | this.tableLayoutPanel4.Size = new System.Drawing.Size(0, 0);
225 | this.tableLayoutPanel4.TabIndex = 1;
226 | //
227 | // menuStrip1
228 | //
229 | this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
230 | this.editToolStripMenuItem});
231 | this.menuStrip1.Location = new System.Drawing.Point(0, 0);
232 | this.menuStrip1.Name = "menuStrip1";
233 | this.menuStrip1.Size = new System.Drawing.Size(584, 24);
234 | this.menuStrip1.TabIndex = 1;
235 | this.menuStrip1.Text = "menuStrip1";
236 | //
237 | // editToolStripMenuItem
238 | //
239 | this.editToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
240 | this.setAllToDefaultToolStripMenuItem,
241 | this.setAllToMIDIToolStripMenuItem});
242 | this.editToolStripMenuItem.Name = "editToolStripMenuItem";
243 | this.editToolStripMenuItem.Size = new System.Drawing.Size(39, 20);
244 | this.editToolStripMenuItem.Text = "&Edit";
245 | //
246 | // setAllToDefaultToolStripMenuItem
247 | //
248 | this.setAllToDefaultToolStripMenuItem.Name = "setAllToDefaultToolStripMenuItem";
249 | this.setAllToDefaultToolStripMenuItem.Size = new System.Drawing.Size(162, 22);
250 | this.setAllToDefaultToolStripMenuItem.Text = "Set All to &Default";
251 | this.setAllToDefaultToolStripMenuItem.Click += new System.EventHandler(this.setAllToDefaultToolStripMenuItem_Click);
252 | //
253 | // setAllToMIDIToolStripMenuItem
254 | //
255 | this.setAllToMIDIToolStripMenuItem.Name = "setAllToMIDIToolStripMenuItem";
256 | this.setAllToMIDIToolStripMenuItem.Size = new System.Drawing.Size(162, 22);
257 | this.setAllToMIDIToolStripMenuItem.Text = "Set All to &MIDI";
258 | this.setAllToMIDIToolStripMenuItem.Click += new System.EventHandler(this.setAllToMIDIToolStripMenuItem_Click);
259 | //
260 | // MainForm
261 | //
262 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
263 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
264 | this.ClientSize = new System.Drawing.Size(584, 562);
265 | this.Controls.Add(this.tabControl1);
266 | this.Controls.Add(this.menuStrip1);
267 | this.MainMenuStrip = this.menuStrip1;
268 | this.Name = "MainForm";
269 | this.Text = "S&KC Music Configuration";
270 | this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainForm_FormClosing);
271 | this.Load += new System.EventHandler(this.MainForm_Load);
272 | this.tabControl1.ResumeLayout(false);
273 | this.tabPage5.ResumeLayout(false);
274 | this.tabPage5.PerformLayout();
275 | this.tabPage1.ResumeLayout(false);
276 | this.tabPage1.PerformLayout();
277 | this.tabPage2.ResumeLayout(false);
278 | this.tabPage2.PerformLayout();
279 | this.tabPage3.ResumeLayout(false);
280 | this.tabPage3.PerformLayout();
281 | this.tabPage4.ResumeLayout(false);
282 | this.tabPage4.PerformLayout();
283 | this.menuStrip1.ResumeLayout(false);
284 | this.menuStrip1.PerformLayout();
285 | this.ResumeLayout(false);
286 | this.PerformLayout();
287 |
288 | }
289 |
290 | #endregion
291 |
292 | private System.Windows.Forms.TabControl tabControl1;
293 | private System.Windows.Forms.TabPage tabPage1;
294 | private System.Windows.Forms.TabPage tabPage2;
295 | private System.Windows.Forms.TabPage tabPage3;
296 | private System.Windows.Forms.TabPage tabPage4;
297 | private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
298 | private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2;
299 | private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3;
300 | private System.Windows.Forms.TableLayoutPanel tableLayoutPanel4;
301 | private System.Windows.Forms.MenuStrip menuStrip1;
302 | private System.Windows.Forms.ToolStripMenuItem editToolStripMenuItem;
303 | private System.Windows.Forms.ToolStripMenuItem setAllToDefaultToolStripMenuItem;
304 | private System.Windows.Forms.ToolStripMenuItem setAllToMIDIToolStripMenuItem;
305 | private System.Windows.Forms.TabPage tabPage5;
306 | private System.Windows.Forms.TextBox soundfontTextBox;
307 | }
308 | }
309 |
310 |
--------------------------------------------------------------------------------
/MusicConfigTool/MainForm.cs:
--------------------------------------------------------------------------------
1 | using IniFile;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Drawing;
5 | using System.IO;
6 | using System.Linq;
7 | using System.Windows.Forms;
8 |
9 | namespace MusicConfigTool
10 | {
11 | public partial class MainForm : Form
12 | {
13 | static MainForm Instance;
14 |
15 | public MainForm()
16 | {
17 | InitializeComponent();
18 | Instance = this;
19 | }
20 |
21 | static readonly string[] GameIDs = { "All", "S3K", "S3", "S&K" };
22 |
23 | readonly string[] smpsSongs = {
24 | "S3Title",
25 | "AngelIsland1",
26 | "AngelIsland2",
27 | "Hydrocity1",
28 | "Hydrocity2",
29 | "MarbleGarden1",
30 | "MarbleGarden2",
31 | "CarnivalNight1",
32 | "CarnivalNight2",
33 | "FlyingBattery1",
34 | "FlyingBattery2",
35 | "IceCap1",
36 | "IceCap2",
37 | "LaunchBase1",
38 | "LaunchBase2",
39 | "MushroomHill1",
40 | "MushroomHill2",
41 | "Sandopolis1",
42 | "Sandopolis2",
43 | "LavaReef1",
44 | "LavaReef2",
45 | "SkySanctuary",
46 | "DeathEgg1",
47 | "DeathEgg2",
48 | "SKMidboss",
49 | "Boss",
50 | "Doomsday",
51 | "MagneticOrbs",
52 | "SpecialStage",
53 | "SlotMachine",
54 | "GumballMachine",
55 | "S3Knuckles",
56 | "AzureLake",
57 | "BalloonPark",
58 | "DesertPalace",
59 | "ChromeGadget",
60 | "EndlessMine",
61 | "GameOver",
62 | "Continue",
63 | "ActClear",
64 | "S31Up",
65 | "ChaosEmerald",
66 | "S3Invincibility",
67 | "CompetitionMenu",
68 | "S3Midboss",
69 | "LevelSelect",
70 | "FinalBoss",
71 | "Drowning",
72 | "S3AllClear",
73 | "S3Credits",
74 | "SKKnuckles",
75 | "SKTitle",
76 | "SK1Up",
77 | "SKInvincibility",
78 | "SKAllClear",
79 | "SKCredits",
80 | "S3CCredits",
81 | "S3Continue",
82 | "SKTitle0525",
83 | "SKAllClear0525",
84 | "SKCredits0525",
85 | "GreenGrove1",
86 | "GreenGrove2",
87 | "RustyRuin1",
88 | "RustyRuin2",
89 | "VolcanoValley2",
90 | "VolcanoValley1",
91 | "SpringStadium1",
92 | "SpringStadium2",
93 | "DiamondDust1",
94 | "DiamondDust2",
95 | "GeneGadget1",
96 | "GeneGadget2",
97 | "PanicPuppet2",
98 | "FinalFight",
99 | "S3DEnding",
100 | "S3DSpecialStage",
101 | "PanicPuppet1",
102 | "S3DBoss2",
103 | "S3DBoss1",
104 | "S3DIntro",
105 | "S3DCredits",
106 | "S3DInvincibility",
107 | "S3DMenu",
108 | "S4E1Boss",
109 | "GreenHill",
110 | "Labyrinth",
111 | "Marble",
112 | "StarLight",
113 | "SpringYard",
114 | "ScrapBrain",
115 | "S1Invincibility",
116 | "S11Up",
117 | "S1SpecialStage",
118 | "S1Title",
119 | "S1Ending",
120 | "S1Boss",
121 | "FinalZone",
122 | "S1ActClear",
123 | "S1GameOver",
124 | "S1Continue",
125 | "S1Credits",
126 | "S1Drowning",
127 | "S1ChaosEmerald",
128 | "CasinoNight2P",
129 | "EmeraldHill",
130 | "Metropolis",
131 | "CasinoNight",
132 | "MysticCave",
133 | "MysticCave2P",
134 | "AquaticRuin",
135 | "S2DeathEgg",
136 | "S2SpecialStage",
137 | "S2Options",
138 | "S2Ending",
139 | "S2FinalBoss",
140 | "ChemicalPlant",
141 | "S2Boss",
142 | "SkyChase",
143 | "OilOcean",
144 | "WingFortress",
145 | "EmeraldHill2P",
146 | "S22PResults",
147 | "S2SuperSonic",
148 | "HillTop",
149 | "S2Title",
150 | "S2Invincibility",
151 | "S2HiddenPalace",
152 | "S2Credits",
153 | "CasinoNight2PBeta",
154 | "EmeraldHillBeta",
155 | "MetropolisBeta",
156 | "CasinoNightBeta",
157 | "MysticCaveBeta",
158 | "MysticCave2PBeta",
159 | "AquaticRuinBeta",
160 | "S2DeathEggBeta",
161 | "S2SpecialStageBeta",
162 | "S2OptionsBeta",
163 | "S2FinalBossBeta",
164 | "ChemicalPlantBeta",
165 | "S2BossBeta",
166 | "SkyChaseBeta",
167 | "OilOceanBeta",
168 | "WingFortressBeta",
169 | "EmeraldHill2PBeta",
170 | "S22PResultsBeta",
171 | "S2SuperSonicBeta",
172 | "HillTopBeta",
173 | "S3DSpecialStageBeta",
174 | "ProtoAngelIsland1",
175 | "ProtoAngelIsland2",
176 | "ProtoHydrocity1",
177 | "ProtoHydrocity2",
178 | "ProtoCarnivalNight1",
179 | "ProtoCarnivalNight2",
180 | "ProtoFlyingBattery1",
181 | "ProtoFlyingBattery2",
182 | "ProtoIceCap1",
183 | "ProtoIceCap2",
184 | "ProtoLaunchBase1",
185 | "ProtoLaunchBase2",
186 | "ProtoMushroomHill1",
187 | "ProtoMushroomHill2",
188 | "ProtoLavaReef1",
189 | "ProtoLavaReef2",
190 | "ProtoSkySanctuary",
191 | "ProtoDoomsday",
192 | "ProtoSpecialStage",
193 | "ProtoKnuckles",
194 | "ProtoBalloonPark",
195 | "ProtoDesertPalace",
196 | "ProtoChromeGadget",
197 | "ProtoContinue",
198 | "ProtoActClear",
199 | "ProtoCompetitionMenu",
200 | "ProtoLevelSelect",
201 | "ProtoCredits",
202 | "ProtoUnused",
203 | "CarnivalNight1PC",
204 | "CarnivalNight2PC",
205 | "IceCap1PC",
206 | "IceCap2PC",
207 | "LaunchBase1PC",
208 | "LaunchBase2PC",
209 | "KnucklesPC",
210 | "CompetitionMenuPC",
211 | "UnusedPC",
212 | "CreditsPC",
213 | "S3InvincibilityPC"
214 | };
215 |
216 | Settings settings;
217 |
218 | List TrackOptions = new List();
219 |
220 | static readonly List[] textboxes = new List[4];
221 |
222 | private void MainForm_Load(object sender, EventArgs e)
223 | {
224 | TableLayoutPanel[] tables = { tableLayoutPanel1, tableLayoutPanel2, tableLayoutPanel3, tableLayoutPanel4 };
225 | if (!File.Exists("opts.ini"))
226 | {
227 | MessageBox.Show(this, "Failed to load opts.ini.", Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
228 | Environment.Exit(-1);
229 | }
230 | foreach (KeyValuePair item in IniSerializer.Deserialize>("opts.ini"))
231 | TrackOptions.Add(new TrackInfoInternal(item.Key, item.Value.Name, item.Value.EnableByZone, item.Value.EnableByCharacter));
232 | if (File.Exists("Music.ini"))
233 | settings = IniSerializer.Deserialize("Music.ini");
234 | else
235 | settings = new Settings();
236 | soundfontTextBox.Text = settings.MIDISoundFont;
237 | for (int gn = 0; gn < GameIDs.Length; gn++)
238 | {
239 | string game = GameIDs[gn];
240 | if (!settings.Music.ContainsKey(game))
241 | settings.Music.Add(game, new SettingsGame());
242 | SettingsGame group = settings.Music[game];
243 | TableLayoutPanel table = tables[gn];
244 | table.SuspendLayout();
245 | textboxes[gn] = new List();
246 | for (int tn = 0; tn < TrackOptions.Count; tn++)
247 | {
248 | string track = TrackOptions[tn].Key;
249 | table.Controls.Add(new Label() { Text = TrackOptions[tn].Name + ":", AutoSize = true, TextAlign = ContentAlignment.MiddleLeft }, 0, tn);
250 | List list = new List() { "MIDI" };
251 | if (gn == 1)
252 | {
253 | if (TrackOptions[tn].EnableByCharacter)
254 | list.Add("ByCharacter");
255 | if (TrackOptions[tn].EnableByZone)
256 | list.Add("ByZone");
257 | }
258 | list.AddRange(smpsSongs);
259 | TextBox tb = new TextBox() { AutoCompleteMode = AutoCompleteMode.Suggest, AutoCompleteSource = AutoCompleteSource.CustomSource, Width = 300 };
260 | tb.AutoCompleteCustomSource = new AutoCompleteStringCollection();
261 | tb.AutoCompleteCustomSource.AddRange(list.ToArray());
262 | tb.AutoCompleteCustomSource.AddRange(Directory.EnumerateFiles(Environment.CurrentDirectory).Where(a =>
263 | {
264 | switch (Path.GetExtension(a).ToLowerInvariant())
265 | {
266 | case ".exe":
267 | case ".dll":
268 | case ".pdb":
269 | case ".config":
270 | case ".ini":
271 | case ".txt":
272 | return false;
273 | default:
274 | return true;
275 | }
276 | }).Select(a => a.Substring(Environment.CurrentDirectory.Length + 1)).ToArray());
277 | table.Controls.Add(tb, 1, tn);
278 | textboxes[gn].Add(tb);
279 | Button btn = new Button() { AutoSize = true, AutoSizeMode = AutoSizeMode.GrowAndShrink, Text = "List..." };
280 | btn.Click += new EventHandler((s, ev) =>
281 | {
282 | using (ListDialog dlg = new ListDialog(list))
283 | if (dlg.ShowDialog(this) == DialogResult.OK)
284 | tb.Text = dlg.SelectedItem;
285 | });
286 | table.Controls.Add(btn, 2, tn);
287 | btn = new Button() { AutoSize = true, AutoSizeMode = AutoSizeMode.GrowAndShrink, Text = "File..." };
288 | btn.Click += new EventHandler((s, ev) =>
289 | {
290 | using (OpenFileDialog dlg = new OpenFileDialog() { Filter = "Common Music Files|*.mid;*.midi;*.adx;*.aax;*.brstm;*.bcstm;*.ogg;*.mp3;*.logg;*.wav|All Files|*.*", InitialDirectory = Environment.CurrentDirectory, RestoreDirectory = true })
291 | if (dlg.ShowDialog(this) == DialogResult.OK)
292 | {
293 | string fn = dlg.FileName;
294 | if (fn.StartsWith(Environment.CurrentDirectory))
295 | fn = fn.Substring(Environment.CurrentDirectory.Length + 1);
296 | tb.Text = fn;
297 | }
298 | });
299 | table.Controls.Add(btn, 3, tn);
300 | if (!group.Tracks.ContainsKey(track))
301 | group.Tracks.Add(track, string.Empty);
302 | else
303 | tb.Text = group.Tracks[track];
304 | if (tn > 0)
305 | table.RowStyles.Add(new RowStyle(SizeType.AutoSize));
306 | tb.TextChanged += new EventHandler((s, ev) => group.Tracks[track] = tb.Text);
307 | }
308 | table.ResumeLayout();
309 | }
310 | }
311 |
312 | private void setAllToDefaultToolStripMenuItem_Click(object sender, EventArgs e)
313 | {
314 | foreach (TextBox tb in textboxes[tabControl1.SelectedIndex - 1])
315 | tb.Text = string.Empty;
316 | }
317 |
318 | private void setAllToMIDIToolStripMenuItem_Click(object sender, EventArgs e)
319 | {
320 | foreach (TextBox tb in textboxes[tabControl1.SelectedIndex - 1])
321 | tb.Text = "MIDI";
322 | }
323 |
324 | private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
325 | {
326 | foreach (string game in GameIDs)
327 | {
328 | SettingsGame group = settings.Music[game];
329 | foreach (string track in TrackOptions.Select(a => a.Key))
330 | if (group.Tracks[track].Length == 0)
331 | group.Tracks.Remove(track);
332 | if (group.Tracks.Count == 0)
333 | settings.Music.Remove(game);
334 | }
335 | if (string.IsNullOrWhiteSpace(settings.MIDISoundFont))
336 | settings.MIDISoundFont = null;
337 | IniSerializer.Serialize(settings, "Music.ini");
338 | }
339 |
340 | private void soundfontTextBox_TextChanged(object sender, EventArgs e)
341 | {
342 | settings.MIDISoundFont = soundfontTextBox.Text;
343 | }
344 |
345 | private void soundfontBrowseButton_Click(object sender, EventArgs e)
346 | {
347 | using (OpenFileDialog dlg = new OpenFileDialog() { Filter = "Soundfonts|*.sf2|All Files|*.*", InitialDirectory = Environment.CurrentDirectory, RestoreDirectory = true })
348 | if (dlg.ShowDialog(this) == DialogResult.OK)
349 | {
350 | string fn = dlg.FileName;
351 | if (fn.StartsWith(Environment.CurrentDirectory))
352 | fn = fn.Substring(Environment.CurrentDirectory.Length + 1);
353 | soundfontTextBox.Text = fn;
354 | }
355 | }
356 | }
357 |
358 | class Settings
359 | {
360 | public string MIDISoundFont { get; set; }
361 | [IniCollection(IniCollectionMode.IndexOnly)]
362 | public Dictionary Music { get; set; } = new Dictionary();
363 | }
364 |
365 | class SettingsGame
366 | {
367 | [IniCollection(IniCollectionMode.IndexOnly)]
368 | public Dictionary Tracks { get; set; } = new Dictionary();
369 | }
370 |
371 | class TrackInfoInternal
372 | {
373 | public string Key { get; set; }
374 | public string Name { get; set; }
375 | public bool EnableByZone { get; set; }
376 | public bool EnableByCharacter { get; set; }
377 |
378 | public TrackInfoInternal(string key, string name, bool enableByZone, bool enableByCharacter)
379 | {
380 | Key = key;
381 | Name = name;
382 | EnableByZone = enableByZone;
383 | EnableByCharacter = enableByCharacter;
384 | }
385 | }
386 |
387 | class TrackOptInfo
388 | {
389 | public string Name { get; set; }
390 | public bool EnableByZone { get; set; }
391 | public bool EnableByCharacter { get; set; }
392 | }
393 | }
--------------------------------------------------------------------------------
/MusicConfigTool/MainForm.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 | False
122 |
123 |
124 | False
125 |
126 |
127 | 17, 17
128 |
129 |
--------------------------------------------------------------------------------
/MusicConfigTool/MusicConfigTool.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {AFA00064-9605-4476-9530-4CE495D45EED}
8 | WinExe
9 | MusicConfigTool
10 | MusicConfigTool
11 | v4.0
12 | 512
13 |
14 |
15 | true
16 | ..\Debug\
17 | DEBUG;TRACE
18 | full
19 | AnyCPU
20 | prompt
21 | MinimumRecommendedRules.ruleset
22 |
23 |
24 | ..\Release\
25 | TRACE
26 | true
27 | pdbonly
28 | AnyCPU
29 | prompt
30 | MinimumRecommendedRules.ruleset
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 | Form
41 |
42 |
43 | ListDialog.cs
44 |
45 |
46 | Form
47 |
48 |
49 | MainForm.cs
50 |
51 |
52 |
53 |
54 | ListDialog.cs
55 |
56 |
57 | MainForm.cs
58 |
59 |
60 | ResXFileCodeGenerator
61 | Resources.Designer.cs
62 | Designer
63 |
64 |
65 | True
66 | Resources.resx
67 |
68 |
69 | PreserveNewest
70 |
71 |
72 | SettingsSingleFileGenerator
73 | Settings.Designer.cs
74 |
75 |
76 | True
77 | Settings.settings
78 | True
79 |
80 |
81 |
82 |
83 | {4a480502-79b5-4e1e-8d67-16c514bb13cd}
84 | ModManagerCommon
85 |
86 |
87 |
88 |
--------------------------------------------------------------------------------
/MusicConfigTool/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Windows.Forms;
5 |
6 | namespace MusicConfigTool
7 | {
8 | static class Program
9 | {
10 | ///
11 | /// The main entry point for the application.
12 | ///
13 | [STAThread]
14 | static void Main()
15 | {
16 | Application.EnableVisualStyles();
17 | Application.SetCompatibleTextRenderingDefault(false);
18 | Application.Run(new MainForm());
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/MusicConfigTool/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("MusicConfigTool")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("MusicConfigTool")]
13 | [assembly: AssemblyCopyright("Copyright © 2018")]
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("afa00064-9605-4476-9530-4ce495d45eed")]
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("1.0.0.0")]
36 | [assembly: AssemblyFileVersion("1.0.0.0")]
37 |
--------------------------------------------------------------------------------
/MusicConfigTool/Properties/Resources.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 MusicConfigTool.Properties
12 | {
13 |
14 |
15 | ///
16 | /// A strongly-typed resource class, for looking up localized strings, etc.
17 | ///
18 | // This class was auto-generated by the StronglyTypedResourceBuilder
19 | // class via a tool like ResGen or Visual Studio.
20 | // To add or remove a member, edit your .ResX file then rerun ResGen
21 | // with the /str option, or rebuild your VS project.
22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 | internal class Resources
26 | {
27 |
28 | private static global::System.Resources.ResourceManager resourceMan;
29 |
30 | private static global::System.Globalization.CultureInfo resourceCulture;
31 |
32 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
33 | internal Resources()
34 | {
35 | }
36 |
37 | ///
38 | /// Returns the cached ResourceManager instance used by this class.
39 | ///
40 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
41 | internal static global::System.Resources.ResourceManager ResourceManager
42 | {
43 | get
44 | {
45 | if ((resourceMan == null))
46 | {
47 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MusicConfigTool.Properties.Resources", typeof(Resources).Assembly);
48 | resourceMan = temp;
49 | }
50 | return resourceMan;
51 | }
52 | }
53 |
54 | ///
55 | /// Overrides the current thread's CurrentUICulture property for all
56 | /// resource lookups using this strongly typed resource class.
57 | ///
58 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
59 | internal static global::System.Globalization.CultureInfo Culture
60 | {
61 | get
62 | {
63 | return resourceCulture;
64 | }
65 | set
66 | {
67 | resourceCulture = value;
68 | }
69 | }
70 | }
71 | }
72 |
--------------------------------------------------------------------------------
/MusicConfigTool/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 | text/microsoft-resx
107 |
108 |
109 | 2.0
110 |
111 |
112 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
113 |
114 |
115 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
--------------------------------------------------------------------------------
/MusicConfigTool/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 MusicConfigTool.Properties
12 | {
13 |
14 |
15 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
16 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
17 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
18 | {
19 |
20 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
21 |
22 | public static Settings Default
23 | {
24 | get
25 | {
26 | return defaultInstance;
27 | }
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/MusicConfigTool/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/MusicConfigTool/opts.ini:
--------------------------------------------------------------------------------
1 | [TitleScreenTrack]
2 | Name=Title Screen
3 | [AngelIsland1Track]
4 | Name=Angel Island Zone Act 1
5 | EnableByCharacter=True
6 | [AngelIsland2Track]
7 | Name=Angel Island Zone Act 2
8 | EnableByCharacter=True
9 | [Hydrocity1Track]
10 | Name=Hydrocity Zone Act 1
11 | EnableByCharacter=True
12 | [Hydrocity2Track]
13 | Name=Hydrocity Zone Act 2
14 | EnableByCharacter=True
15 | [MarbleGarden1Track]
16 | Name=Marble Garden Zone Act 1
17 | EnableByCharacter=True
18 | [MarbleGarden2Track]
19 | Name=Marble Garden Zone Act 2
20 | EnableByCharacter=True
21 | [CarnivalNight1Track]
22 | Name=Carnival Night Zone Act 1
23 | EnableByCharacter=True
24 | [CarnivalNight2Track]
25 | Name=Carnival Night Zone Act 2
26 | EnableByCharacter=True
27 | [FlyingBattery1Track]
28 | Name=Flying Battery Zone Act 1
29 | EnableByCharacter=True
30 | [FlyingBattery2Track]
31 | Name=Flying Battery Zone Act 2
32 | EnableByCharacter=True
33 | [IceCap1Track]
34 | Name=IceCap Zone Act 1
35 | EnableByCharacter=True
36 | [IceCap2Track]
37 | Name=IceCap Zone Act 2
38 | EnableByCharacter=True
39 | [LaunchBase1Track]
40 | Name=Launch Base Zone Act 1
41 | EnableByCharacter=True
42 | [LaunchBase2Track]
43 | Name=Launch Base Zone Act 2
44 | EnableByCharacter=True
45 | [MushroomHill1Track]
46 | Name=Mushroom Hill Zone Act 1
47 | EnableByCharacter=True
48 | [MushroomHill2Track]
49 | Name=Mushroom Hill Zone Act 2
50 | EnableByCharacter=True
51 | [Sandopolis1Track]
52 | Name=Sandopolis Zone Act 1
53 | EnableByCharacter=True
54 | [Sandopolis2Track]
55 | Name=Sandopolis Zone Act 2
56 | EnableByCharacter=True
57 | [LavaReef1Track]
58 | Name=Lava Reef Zone Act 1
59 | EnableByCharacter=True
60 | [LavaReef2Track]
61 | Name=Lava Reef Zone Act 2
62 | EnableByCharacter=True
63 | [SkySanctuaryTrack]
64 | Name=Sky Sanctuary Zone
65 | EnableByCharacter=True
66 | [DeathEgg1Track]
67 | Name=Death Egg Zone Act 1
68 | EnableByCharacter=True
69 | [DeathEgg2Track]
70 | Name=Death Egg Zone Act 2
71 | EnableByCharacter=True
72 | [MidbossTrack]
73 | Name=Midboss
74 | EnableByZone=True
75 | EnableByCharacter=True
76 | [BossTrack]
77 | Name=Boss
78 | EnableByZone=True
79 | EnableByCharacter=True
80 | [DoomsdayTrack]
81 | Name=The Doomsday Zone
82 | EnableByCharacter=True
83 | [MagneticOrbsTrack]
84 | Name=Magnetic Orbs
85 | EnableByZone=True
86 | EnableByCharacter=True
87 | [SpecialStageTrack]
88 | Name=Special Stage
89 | EnableByZone=True
90 | EnableByCharacter=True
91 | [SlotMachineTrack]
92 | Name=Slot Machine
93 | EnableByZone=True
94 | EnableByCharacter=True
95 | [GumballMachineTrack]
96 | Name=Gumball Machine
97 | EnableByZone=True
98 | EnableByCharacter=True
99 | [KnucklesTrack]
100 | Name=Knuckles' Theme
101 | EnableByZone=True
102 | EnableByCharacter=True
103 | [AzureLakeTrack]
104 | Name=Azure Lake
105 | [BalloonParkTrack]
106 | Name=Balloon Park
107 | [DesertPalaceTrack]
108 | Name=Desert Palace
109 | [ChromeGadgetTrack]
110 | Name=Chrome Gadget
111 | [EndlessMineTrack]
112 | Name=Endless Mine
113 | [GameOverTrack]
114 | Name=Game Over
115 | EnableByZone=True
116 | EnableByCharacter=True
117 | [ContinueTrack]
118 | Name=Continue
119 | EnableByZone=True
120 | EnableByCharacter=True
121 | [ActClearTrack]
122 | Name=Act Clear
123 | EnableByZone=True
124 | EnableByCharacter=True
125 | [OneUpTrack]
126 | Name=1-Up
127 | EnableByZone=True
128 | EnableByCharacter=True
129 | [ChaosEmeraldTrack]
130 | Name=Chaos Emerald
131 | EnableByZone=True
132 | EnableByCharacter=True
133 | [InvincibilityTrack]
134 | Name=Invincibility
135 | EnableByZone=True
136 | EnableByCharacter=True
137 | [CompetitionMenuTrack]
138 | Name=Competition Menu
139 | [UnusedTrack]
140 | Name=Unused
141 | [LevelSelectTrack]
142 | Name=Level Select
143 | [FinalBossTrack]
144 | Name=Final Boss
145 | EnableByZone=True
146 | EnableByCharacter=True
147 | [DrowningTrack]
148 | Name=Drowning
149 | EnableByZone=True
150 | EnableByCharacter=True
151 | [AllClearTrack]
152 | Name=All Clear
153 | EnableByCharacter=True
154 | [CreditsTrack]
155 | Name=Credits
156 | EnableByCharacter=True
157 | [HiddenPalaceTrack]
158 | Name=Hidden Palace Zone
159 | EnableByCharacter=True
160 | [SuperSonicTrack]
161 | Name=Super Sonic
162 | EnableByZone=True
163 | EnableByCharacter=True
164 | [EndingTrack]
165 | Name=Ending
166 | EnableByCharacter=True
167 | [DataSelectTrack]
168 | Name=Data Select
169 | [SpecialStageResultTrack]
170 | Name=Special Stage Result
171 | EnableByZone=True
172 | EnableByCharacter=True
173 | [BlueSphereResultTrack]
174 | Name=Blue Sphere Result
175 | EnableByCharacter=True
176 | [BlueSphereTitleTrack]
177 | Name=Blue Sphere Title
178 | [BlueSphereDifficultyTrack]
179 | Name=Blue Sphere Difficulty
180 | EnableByCharacter=True
181 | [TimeAttackRecordsTrack]
182 | Name=Time Attack Records
183 | [KnucklesBossTrack]
184 | Name=Knuckles Boss
--------------------------------------------------------------------------------
/README.markdown:
--------------------------------------------------------------------------------
1 | # Sonic & Knuckles Collection Mod Loader
2 |
3 | This is the mod loader for Sonic & Knuckles Collection.
4 |
--------------------------------------------------------------------------------
/SKCModLoader.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 15
4 | VisualStudioVersion = 15.0.27130.2036
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SKCModLoader", "SKCModLoader\SKCModLoader.vcxproj", "{CF2F232B-5AF0-441B-9960-0A6898159F3E}"
7 | ProjectSection(ProjectDependencies) = postProject
8 | {EC0293F5-4BCF-46B2-8133-18CAEA141C5B} = {EC0293F5-4BCF-46B2-8133-18CAEA141C5B}
9 | EndProjectSection
10 | EndProject
11 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SKCModManager", "SKCModManager\SKCModManager.csproj", "{8AD6CBA4-E931-40F7-A810-3E8D7E05B006}"
12 | EndProject
13 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ModLoaderCommon", "mod-loader-common\ModLoaderCommon\ModLoaderCommon.vcxproj", "{EC0293F5-4BCF-46B2-8133-18CAEA141C5B}"
14 | EndProject
15 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MusicConfigTool", "MusicConfigTool\MusicConfigTool.csproj", "{AFA00064-9605-4476-9530-4CE495D45EED}"
16 | EndProject
17 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ModManagerCommon", "mod-loader-common\ModManagerCommon\ModManagerCommon.csproj", "{4A480502-79B5-4E1E-8D67-16C514BB13CD}"
18 | EndProject
19 | Global
20 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
21 | Debug|Mixed Platforms = Debug|Mixed Platforms
22 | Release|Mixed Platforms = Release|Mixed Platforms
23 | EndGlobalSection
24 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
25 | {CF2F232B-5AF0-441B-9960-0A6898159F3E}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
26 | {CF2F232B-5AF0-441B-9960-0A6898159F3E}.Debug|Mixed Platforms.Build.0 = Debug|Win32
27 | {CF2F232B-5AF0-441B-9960-0A6898159F3E}.Release|Mixed Platforms.ActiveCfg = Release|Win32
28 | {CF2F232B-5AF0-441B-9960-0A6898159F3E}.Release|Mixed Platforms.Build.0 = Release|Win32
29 | {8AD6CBA4-E931-40F7-A810-3E8D7E05B006}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
30 | {8AD6CBA4-E931-40F7-A810-3E8D7E05B006}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
31 | {8AD6CBA4-E931-40F7-A810-3E8D7E05B006}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
32 | {8AD6CBA4-E931-40F7-A810-3E8D7E05B006}.Release|Mixed Platforms.Build.0 = Release|Any CPU
33 | {EC0293F5-4BCF-46B2-8133-18CAEA141C5B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
34 | {EC0293F5-4BCF-46B2-8133-18CAEA141C5B}.Debug|Mixed Platforms.Build.0 = Debug|Win32
35 | {EC0293F5-4BCF-46B2-8133-18CAEA141C5B}.Release|Mixed Platforms.ActiveCfg = Release|Win32
36 | {EC0293F5-4BCF-46B2-8133-18CAEA141C5B}.Release|Mixed Platforms.Build.0 = Release|Win32
37 | {AFA00064-9605-4476-9530-4CE495D45EED}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
38 | {AFA00064-9605-4476-9530-4CE495D45EED}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
39 | {AFA00064-9605-4476-9530-4CE495D45EED}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
40 | {AFA00064-9605-4476-9530-4CE495D45EED}.Release|Mixed Platforms.Build.0 = Release|Any CPU
41 | {4A480502-79B5-4E1E-8D67-16C514BB13CD}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
42 | {4A480502-79B5-4E1E-8D67-16C514BB13CD}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
43 | {4A480502-79B5-4E1E-8D67-16C514BB13CD}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
44 | {4A480502-79B5-4E1E-8D67-16C514BB13CD}.Release|Mixed Platforms.Build.0 = Release|Any CPU
45 | EndGlobalSection
46 | GlobalSection(SolutionProperties) = preSolution
47 | HideSolutionNode = FALSE
48 | EndGlobalSection
49 | GlobalSection(ExtensibilityGlobals) = postSolution
50 | SolutionGuid = {C870D177-218D-462C-8E8A-3FFDFDDF8B5D}
51 | EndGlobalSection
52 | EndGlobal
53 |
--------------------------------------------------------------------------------
/SKCModLoader/FramerateFix.cpp:
--------------------------------------------------------------------------------
1 | #include "stdafx.h"
2 | #include
3 | #include
4 | #include "SKCModLoader.h"
5 | #include "FramerateFix.h"
6 |
7 | using namespace std::chrono;
8 |
9 | using FrameRatio = duration>;
10 |
11 | static const auto FRAME_RATIO = FrameRatio(1);
12 | static const auto FRAME_PORTION_MS = duration_cast(FRAME_RATIO) - milliseconds(1);
13 |
14 | static auto frame_start = system_clock::now();
15 |
16 | DataPointer(uint32_t, framerate, 0x0083114C);
17 | DataPointer(uint32_t, framerate_target, 0x00831158);
18 |
19 | static int __cdecl should_sleep_r()
20 | {
21 | framerate_target = 60;
22 | auto delta = system_clock::now() - frame_start;
23 |
24 | if (delta < FRAME_RATIO)
25 | {
26 | framerate = 60;
27 |
28 | // sleep for a portion of the frame time to free up cpu time
29 | std::this_thread::sleep_for(FRAME_PORTION_MS - delta);
30 |
31 | while ((delta = system_clock::now() - frame_start) < FRAME_RATIO)
32 | {
33 | // spin for the remainder of the time
34 | }
35 | }
36 |
37 | framerate = static_cast(std::round(60.0 / FrameRatio(delta).count()));
38 | frame_start = system_clock::now();
39 | return 0;
40 | }
41 |
42 | void InitFramerateFix()
43 | {
44 | WriteCall(reinterpret_cast(0x00403256), should_sleep_r);
45 | WriteJump(reinterpret_cast(0x00403243), reinterpret_cast(0x00403256));
46 | }
--------------------------------------------------------------------------------
/SKCModLoader/FramerateFix.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | void InitFramerateFix();
4 |
--------------------------------------------------------------------------------
/SKCModLoader/MidiInterface.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 | #include "IniFile.hpp"
3 | #include "musicid.gen.h"
4 |
5 | enum MusicID2 {
6 | MusicID_ByCharacter = -5,
7 | MusicID_ByZone,
8 | MusicID_MIDI,
9 | MusicID_VGMStream,
10 | MusicID_Default,
11 | MusicID_Midboss = MusicID_SKMidboss,
12 | MusicID_Unused = MusicID_S3Midboss,
13 | MusicID_HiddenPalace = MusicID_SKCredits + 1,
14 | MusicID_SuperSonic,
15 | MusicID_Ending,
16 | MusicID_DataSelect,
17 | MusicID_SpecialStageResult,
18 | MusicID_BlueSphereResult,
19 | MusicID_BlueSphereTitle,
20 | MusicID_BlueSphereDifficulty,
21 | MusicID_TimeAttackRecords,
22 | MusicID_KnucklesBoss,
23 | TrackCount
24 | };
25 |
26 | enum TrackType
27 | {
28 | TrackType_None = -1,
29 | TrackType_MIDI,
30 | TrackType_SMPS,
31 | TrackType_VGMStream
32 | };
33 |
34 | class MidiInterface
35 | {
36 | public:
37 | MidiInterface(HMODULE moduleHandle);
38 | ~MidiInterface();
39 | virtual BOOL init(HWND hwnd); // hwnd = game window
40 | virtual BOOL loadSong(short id, unsigned int bgmmode); // id = song to be played + 1 (well, +1 compared to the sound test id, it's the ID of the song in the MIDIOUT.DLL's resources); bgmmode = 0 for FM synth, 1 for General MIDI
41 | virtual BOOL playSong();
42 | virtual BOOL stopSong();
43 | virtual BOOL pauseSong();
44 | virtual BOOL resumeSong();
45 | virtual BOOL setTempo(unsigned int pct); // pct = percentage of delay between beats the song should be set to. lower = faster tempo
46 | void songStopped();
47 | void AddMusicFolder(const std::string &folder);
48 | private:
49 | void readSettings(const std::string &folder, const IniGroup *settings, short *trackSettings, std::string *trackFilenames);
50 | std::vector musicFolders;
51 | UINT timePeriod;
52 | short trackSettings[TrackCount], s3TrackSettings[TrackCount], skTrackSettings[TrackCount];
53 | std::string trackFilenames[TrackCount], s3TrackFilenames[TrackCount], skTrackFilenames[TrackCount];
54 | TrackType trackType = TrackType_None;
55 | const char **smpsnames;
56 | unsigned int smpscount;
57 | HMODULE moduleHandle;
58 | bool bassinit = false;
59 | DWORD basschan = 0;
60 | DWORD midichan = 0;
61 | int midiloopstart;
62 | TrackType lastTrackType = TrackType_None;
63 | DWORD lastbasschan = 0;
64 | DWORD lastmidichan = 0;
65 | int lastmidiloopstart;
66 | bool playing1up = false;
67 | };
68 |
69 |
--------------------------------------------------------------------------------
/SKCModLoader/PaletteFix.cpp:
--------------------------------------------------------------------------------
1 | #include "stdafx.h"
2 | #include
3 | #include "SKCModLoader.h"
4 | #include "IniFile.hpp"
5 | #include "PaletteFix.h"
6 |
7 | using std::string;
8 | using std::wstring;
9 | using std::unordered_map;
10 | using std::transform;
11 |
12 | struct Color
13 | {
14 | unsigned char B;
15 | unsigned char G;
16 | unsigned char R;
17 | unsigned char X;
18 | };
19 |
20 | #pragma warning(push)
21 | #pragma warning(disable : 4838 4309)
22 | const char MDColorTable_Accurate[]{ 0, 52, 87, 116, 144, 172, 206, 255 };
23 | const char MDColorTable_Linear[] = { 0, 0x24, 0x49, 0x6D, 0x92, 0xB6, 0xDB, 0xFF };
24 | const char MDColorTable_SKC[] = { 0, 0x22, 0x44, 0x66, 0x88, 0xAA, 0xCC, 0xEE };
25 | const char MDColorTable_Old[] = { 0, 0x20, 0x40, 0x60, 0x80, 0xA0, 0xC0, 0xE0 };
26 | #pragma warning(pop)
27 |
28 | const char *MDColorTable = MDColorTable_Accurate;
29 |
30 | inline void ConvertColor(short md, Color &pc)
31 | {
32 | pc.R = MDColorTable[(md & 0xF) >> 1];
33 | pc.G = MDColorTable[((md >> 4) & 0xF) >> 1];
34 | pc.B = MDColorTable[((md >> 8) & 0xF) >> 1];
35 | }
36 |
37 | DataPointer(char, b_water_full_screen_flag, 0x8FFF64E);
38 | DataArray(short, water_palette, 0x8FFF080, 64);
39 | DataPointer(int, TransparentColorIndex, 0x8549D8);
40 | FunctionPointer(int, sub_404350, (), 0x404350);
41 | DataPointer(int, dword_854DE8, 0x854DE8);
42 | ThiscallFunctionPointer(void, CopyPalette2, (int _this, const void *Src), 0x4069D0);
43 | ThiscallFunctionPointer(void, CopyPalette, (int _this, const void *Src), 0x40699E);
44 | DataPointer(char, b_hyper_sonic_flash_timer, 0x8FFF666);
45 | DataPointer(short, w_H_int_counter_command, 0x8FFF624);
46 |
47 | void __cdecl ConvertPalette_r()
48 | {
49 | Color rgbpal[64]; // [sp+Ch] [bp-110h]@1
50 | int i; // [sp+10Ch] [bp-10h]@4
51 | __int16 *mdpal; // [sp+110h] [bp-Ch]@2
52 | Color bgcol; // [sp+114h] [bp-8h]@7
53 | int palette_dest; // [sp+118h] [bp-4h]@7
54 |
55 | memset(rgbpal, 0, 0x100u);
56 | if (b_water_full_screen_flag)
57 | mdpal = water_palette;
58 | else
59 | mdpal = Normal_palette;
60 | for (i = 0; i < 64; ++i)
61 | ConvertColor(mdpal[i], rgbpal[i]);
62 | bgcol = rgbpal[TransparentColorIndex];
63 | rgbpal[0] = bgcol;
64 | rgbpal[16] = bgcol;
65 | rgbpal[32] = bgcol;
66 | rgbpal[48] = bgcol;
67 | palette_dest = sub_404350();
68 | if (dword_854DE8 == 5)
69 | {
70 | CopyPalette2(palette_dest, rgbpal);
71 | for (i = 0; i < 64; ++i)
72 | {
73 | rgbpal[i].R >>= 1;
74 | rgbpal[i].G >>= 1;
75 | rgbpal[i].B >>= 1;
76 | }
77 | CopyPalette(palette_dest, rgbpal);
78 | }
79 | else
80 | {
81 | CopyPalette(palette_dest, rgbpal);
82 | CopyPalette2(palette_dest, rgbpal);
83 | }
84 | }
85 |
86 | void __cdecl ConvertPalette2_r()
87 | {
88 | signed int flash_flag; // [sp+Ch] [bp-114h]@2
89 | Color rgbpal[64]; // [sp+10h] [bp-110h]@4
90 | int i; // [sp+110h] [bp-10h]@7
91 | __int16 *mdpal; // [sp+114h] [bp-Ch]@6
92 | Color bgcol; // [sp+118h] [bp-8h]@17
93 | int palette_dest; // [sp+11Ch] [bp-4h]@17
94 |
95 | if ((signed int)(unsigned __int8)b_hyper_sonic_flash_timer <= 0)
96 | {
97 | flash_flag = 0;
98 | }
99 | else
100 | {
101 | --b_hyper_sonic_flash_timer;
102 | flash_flag = 1;
103 | }
104 | memset(rgbpal, 0, 0x100u);
105 | if (b_water_full_screen_flag)
106 | *(char*)&w_H_int_counter_command = 0;
107 | mdpal = Normal_palette;
108 | if (flash_flag)
109 | {
110 | for (i = 0; i < 32; ++i)
111 | ConvertColor(0xEEE, rgbpal[i]);
112 | for (i = 33; i < 64; ++i)
113 | ConvertColor(0xEEE, rgbpal[i]);
114 | }
115 | else
116 | {
117 | for (i = 0; i < 64; ++i)
118 | ConvertColor(mdpal[i], rgbpal[i]);
119 | }
120 | bgcol = rgbpal[TransparentColorIndex];
121 | rgbpal[0] = bgcol;
122 | rgbpal[16] = bgcol;
123 | rgbpal[32] = bgcol;
124 | rgbpal[48] = bgcol;
125 | palette_dest = sub_404350();
126 | CopyPalette(palette_dest, rgbpal);
127 | mdpal = water_palette;
128 | if (flash_flag)
129 | {
130 | for (i = 0; i < 32; ++i)
131 | ConvertColor(0xEEE, rgbpal[i]);
132 | for (i = 33; i < 64; ++i)
133 | ConvertColor(0xEEE, rgbpal[i]);
134 | }
135 | else
136 | {
137 | for (i = 0; i < 64; ++i)
138 | ConvertColor(mdpal[i], rgbpal[i]);
139 | }
140 | bgcol = rgbpal[TransparentColorIndex];
141 | rgbpal[0] = bgcol;
142 | rgbpal[16] = bgcol;
143 | rgbpal[32] = bgcol;
144 | rgbpal[48] = bgcol;
145 | CopyPalette2(palette_dest, rgbpal);
146 | }
147 |
148 | const unordered_map palmodes = {
149 | { "linear", MDColorTable_Linear },
150 | { "skc", MDColorTable_SKC },
151 | { "old", MDColorTable_Old }
152 | };
153 |
154 | void InitPaletteFix(const IniGroup *settings)
155 | {
156 | string palmode = settings->getString("Palette");
157 | transform(palmode.begin(), palmode.end(), palmode.begin(), tolower);
158 | auto iter = palmodes.find(palmode);
159 | if (iter != palmodes.cend())
160 | MDColorTable = iter->second;
161 | WriteJump((void*)0x405536, ConvertPalette_r);
162 | WriteJump((void*)0x4056F7, ConvertPalette2_r);
163 | }
--------------------------------------------------------------------------------
/SKCModLoader/PaletteFix.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | void InitPaletteFix(const IniGroup * settings);
4 |
--------------------------------------------------------------------------------
/SKCModLoader/ReadMe.txt:
--------------------------------------------------------------------------------
1 | ========================================================================
2 | DYNAMIC LINK LIBRARY : SKCModLoader Project Overview
3 | ========================================================================
4 |
5 | AppWizard has created this SKCModLoader DLL for you.
6 |
7 | This file contains a summary of what you will find in each of the files that
8 | make up your SKCModLoader application.
9 |
10 |
11 | SKCModLoader.vcxproj
12 | This is the main project file for VC++ projects generated using an Application Wizard.
13 | It contains information about the version of Visual C++ that generated the file, and
14 | information about the platforms, configurations, and project features selected with the
15 | Application Wizard.
16 |
17 | SKCModLoader.vcxproj.filters
18 | This is the filters file for VC++ projects generated using an Application Wizard.
19 | It contains information about the association between the files in your project
20 | and the filters. This association is used in the IDE to show grouping of files with
21 | similar extensions under a specific node (for e.g. ".cpp" files are associated with the
22 | "Source Files" filter).
23 |
24 | SKCModLoader.cpp
25 | This is the main DLL source file.
26 |
27 | When created, this DLL does not export any symbols. As a result, it
28 | will not produce a .lib file when it is built. If you wish this project
29 | to be a project dependency of some other project, you will either need to
30 | add code to export some symbols from the DLL so that an export library
31 | will be produced, or you can set the Ignore Input Library property to Yes
32 | on the General propert page of the Linker folder in the project's Property
33 | Pages dialog box.
34 |
35 | /////////////////////////////////////////////////////////////////////////////
36 | Other standard files:
37 |
38 | StdAfx.h, StdAfx.cpp
39 | These files are used to build a precompiled header (PCH) file
40 | named SKCModLoader.pch and a precompiled types file named StdAfx.obj.
41 |
42 | /////////////////////////////////////////////////////////////////////////////
43 | Other notes:
44 |
45 | AppWizard uses "TODO:" comments to indicate parts of the source code you
46 | should add to or customize.
47 |
48 | /////////////////////////////////////////////////////////////////////////////
49 |
--------------------------------------------------------------------------------
/SKCModLoader/SEGA.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/SEGA.wav
--------------------------------------------------------------------------------
/SKCModLoader/SKCModLoader.rc:
--------------------------------------------------------------------------------
1 | #include "resource.h"
2 |
3 | IDR_MIDI_FM1 MIDI_FM "midis\\FM_00_S3_Title.mid"
4 |
5 | IDR_MIDI_FM2 MIDI_FM "midis\\FM_01_AIZ_1.mid"
6 |
7 | IDR_MIDI_FM3 MIDI_FM "midis\\FM_02_AIZ_2.mid"
8 |
9 | IDR_MIDI_FM4 MIDI_FM "midis\\FM_03_HCZ_1.mid"
10 |
11 | IDR_MIDI_FM5 MIDI_FM "midis\\FM_04_HCZ_2.mid"
12 |
13 | IDR_MIDI_FM6 MIDI_FM "midis\\FM_05_MGZ_1.mid"
14 |
15 | IDR_MIDI_FM7 MIDI_FM "midis\\FM_06_MGZ_2.mid"
16 |
17 | IDR_MIDI_FM8 MIDI_FM "midis\\FM_07_CNZ_1.mid"
18 |
19 | IDR_MIDI_FM9 MIDI_FM "midis\\FM_08_CNZ_2.mid"
20 |
21 | IDR_MIDI_FM10 MIDI_FM "midis\\FM_09_FBZ_1.mid"
22 |
23 | IDR_MIDI_FM11 MIDI_FM "midis\\FM_10_FBZ_2.mid"
24 |
25 | IDR_MIDI_FM12 MIDI_FM "midis\\FM_11_ICZ_1.mid"
26 |
27 | IDR_MIDI_FM13 MIDI_FM "midis\\FM_12_ICZ_2.mid"
28 |
29 | IDR_MIDI_FM14 MIDI_FM "midis\\FM_13_LBZ_1.mid"
30 |
31 | IDR_MIDI_FM15 MIDI_FM "midis\\FM_14_LBZ_2.mid"
32 |
33 | IDR_MIDI_FM16 MIDI_FM "midis\\FM_15_MHZ_1.mid"
34 |
35 | IDR_MIDI_FM17 MIDI_FM "midis\\FM_16_MHZ_2.mid"
36 |
37 | IDR_MIDI_FM18 MIDI_FM "midis\\FM_17_SZ_1.mid"
38 |
39 | IDR_MIDI_FM19 MIDI_FM "midis\\FM_18_SZ_2.mid"
40 |
41 | IDR_MIDI_FM20 MIDI_FM "midis\\FM_19_LRZ_1.mid"
42 |
43 | IDR_MIDI_FM21 MIDI_FM "midis\\FM_20_LRZ_2_HPZ.mid"
44 |
45 | IDR_MIDI_FM22 MIDI_FM "midis\\FM_21_SSZ.mid"
46 |
47 | IDR_MIDI_FM23 MIDI_FM "midis\\FM_22_DEZ_1.mid"
48 |
49 | IDR_MIDI_FM24 MIDI_FM "midis\\FM_23_DEZ_2.mid"
50 |
51 | IDR_MIDI_FM25 MIDI_FM "midis\\FM_24_Act_1_Boss.mid"
52 |
53 | IDR_MIDI_FM26 MIDI_FM "midis\\FM_25_Act_2_Boss.mid"
54 |
55 | IDR_MIDI_FM27 MIDI_FM "midis\\FM_26_DDZ.mid"
56 |
57 | IDR_MIDI_FM28 MIDI_FM "midis\\FM_27_Glowing_Sphere.mid"
58 |
59 | IDR_MIDI_FM29 MIDI_FM "midis\\FM_28_Special.mid"
60 |
61 | IDR_MIDI_FM30 MIDI_FM "midis\\FM_29_Slot.mid"
62 |
63 | IDR_MIDI_FM31 MIDI_FM "midis\\FM_30_Gumball.mid"
64 |
65 | IDR_MIDI_FM32 MIDI_FM "midis\\FM_31_S3_Knuckles.mid"
66 |
67 | IDR_MIDI_FM33 MIDI_FM "midis\\FM_32_2P_ALZ.mid"
68 |
69 | IDR_MIDI_FM34 MIDI_FM "midis\\FM_33_2P_BPZ.mid"
70 |
71 | IDR_MIDI_FM35 MIDI_FM "midis\\FM_34_2P_DPZ.mid"
72 |
73 | IDR_MIDI_FM36 MIDI_FM "midis\\FM_35_2P_CGZ.mid"
74 |
75 | IDR_MIDI_FM37 MIDI_FM "midis\\FM_36_2P_EMZ.mid"
76 |
77 | IDR_MIDI_FM38 MIDI_FM "midis\\FM_37_Game_Over.mid"
78 |
79 | IDR_MIDI_FM39 MIDI_FM "midis\\FM_38_Results.mid"
80 |
81 | IDR_MIDI_FM40 MIDI_FM "midis\\FM_39_Act_Clear.mid"
82 |
83 | IDR_MIDI_FM41 MIDI_FM "midis\\FM_40_S3_Life.mid"
84 |
85 | IDR_MIDI_FM42 MIDI_FM "midis\\FM_41_Emerald.mid"
86 |
87 | IDR_MIDI_FM43 MIDI_FM "midis\\FM_42_S3_Invinc.mid"
88 |
89 | IDR_MIDI_FM44 MIDI_FM "midis\\FM_43_2P_Menu.mid"
90 |
91 | IDR_MIDI_FM45 MIDI_FM "midis\\FM_44_Unused.mid"
92 |
93 | IDR_MIDI_FM46 MIDI_FM "midis\\FM_45_Options.mid"
94 |
95 | IDR_MIDI_FM47 MIDI_FM "midis\\FM_46_Final_Boss.mid"
96 |
97 | IDR_MIDI_FM48 MIDI_FM "midis\\FM_47_Timer.mid"
98 |
99 | IDR_MIDI_FM49 MIDI_FM "midis\\FM_48_S3_Clear.mid"
100 |
101 | IDR_MIDI_FM50 MIDI_FM "midis\\FM_49_S3_Credits.mid"
102 |
103 | IDR_MIDI_FM51 MIDI_FM "midis\\FM_50_S3K_Knuckles.mid"
104 |
105 | IDR_MIDI_FM52 MIDI_FM "midis\\FM_51_S3K_Title.mid"
106 |
107 | IDR_MIDI_FM53 MIDI_FM "midis\\FM_52_S3K_Life.mid"
108 |
109 | IDR_MIDI_FM54 MIDI_FM "midis\\FM_53_S3K_Invinc.mid"
110 |
111 | IDR_MIDI_FM55 MIDI_FM "midis\\FM_54_S3K_Clear.mid"
112 |
113 | IDR_MIDI_FM56 MIDI_FM "midis\\FM_55_S3K_Credits.mid"
114 |
115 | IDR_MIDI_GM1 MIDI_GM "midis\\GM_00_S3_Title.mid"
116 |
117 | IDR_MIDI_GM2 MIDI_GM "midis\\GM_01_AIZ_1.mid"
118 |
119 | IDR_MIDI_GM3 MIDI_GM "midis\\GM_02_AIZ_2.mid"
120 |
121 | IDR_MIDI_GM4 MIDI_GM "midis\\GM_03_HCZ_1.mid"
122 |
123 | IDR_MIDI_GM5 MIDI_GM "midis\\GM_04_HCZ_2.mid"
124 |
125 | IDR_MIDI_GM6 MIDI_GM "midis\\GM_05_MGZ_1.mid"
126 |
127 | IDR_MIDI_GM7 MIDI_GM "midis\\GM_06_MGZ_2.mid"
128 |
129 | IDR_MIDI_GM8 MIDI_GM "midis\\GM_07_CNZ_1.mid"
130 |
131 | IDR_MIDI_GM9 MIDI_GM "midis\\GM_08_CNZ_2.mid"
132 |
133 | IDR_MIDI_GM10 MIDI_GM "midis\\GM_09_FBZ_1.mid"
134 |
135 | IDR_MIDI_GM11 MIDI_GM "midis\\GM_10_FBZ_2.mid"
136 |
137 | IDR_MIDI_GM12 MIDI_GM "midis\\GM_11_ICZ_1.mid"
138 |
139 | IDR_MIDI_GM13 MIDI_GM "midis\\GM_12_ICZ_2.mid"
140 |
141 | IDR_MIDI_GM14 MIDI_GM "midis\\GM_13_LBZ_1.mid"
142 |
143 | IDR_MIDI_GM15 MIDI_GM "midis\\GM_14_LBZ_2.mid"
144 |
145 | IDR_MIDI_GM16 MIDI_GM "midis\\GM_15_MHZ_1.mid"
146 |
147 | IDR_MIDI_GM17 MIDI_GM "midis\\GM_16_MHZ_2.mid"
148 |
149 | IDR_MIDI_GM18 MIDI_GM "midis\\GM_17_SZ_1.mid"
150 |
151 | IDR_MIDI_GM19 MIDI_GM "midis\\GM_18_SZ_2.mid"
152 |
153 | IDR_MIDI_GM20 MIDI_GM "midis\\GM_19_LRZ_1.mid"
154 |
155 | IDR_MIDI_GM21 MIDI_GM "midis\\GM_20_LRZ_2_HPZ.mid"
156 |
157 | IDR_MIDI_GM22 MIDI_GM "midis\\GM_21_SSZ.mid"
158 |
159 | IDR_MIDI_GM23 MIDI_GM "midis\\GM_22_DEZ_1.mid"
160 |
161 | IDR_MIDI_GM24 MIDI_GM "midis\\GM_23_DEZ_2.mid"
162 |
163 | IDR_MIDI_GM25 MIDI_GM "midis\\GM_24_Act_1_Boss.mid"
164 |
165 | IDR_MIDI_GM26 MIDI_GM "midis\\GM_25_Act_2_Boss.mid"
166 |
167 | IDR_MIDI_GM27 MIDI_GM "midis\\GM_26_DDZ.mid"
168 |
169 | IDR_MIDI_GM28 MIDI_GM "midis\\GM_27_Glowing_Sphere.mid"
170 |
171 | IDR_MIDI_GM29 MIDI_GM "midis\\GM_28_Special.mid"
172 |
173 | IDR_MIDI_GM30 MIDI_GM "midis\\GM_29_Slot.mid"
174 |
175 | IDR_MIDI_GM31 MIDI_GM "midis\\GM_30_Gumball.mid"
176 |
177 | IDR_MIDI_GM32 MIDI_GM "midis\\GM_31_S3_Knuckles.mid"
178 |
179 | IDR_MIDI_GM33 MIDI_GM "midis\\GM_32_2P_ALZ.mid"
180 |
181 | IDR_MIDI_GM34 MIDI_GM "midis\\GM_33_2P_BPZ.mid"
182 |
183 | IDR_MIDI_GM35 MIDI_GM "midis\\GM_34_2P_DPZ.mid"
184 |
185 | IDR_MIDI_GM36 MIDI_GM "midis\\GM_35_2P_CGZ.mid"
186 |
187 | IDR_MIDI_GM37 MIDI_GM "midis\\GM_36_2P_EMZ.mid"
188 |
189 | IDR_MIDI_GM38 MIDI_GM "midis\\GM_37_Game_Over.mid"
190 |
191 | IDR_MIDI_GM39 MIDI_GM "midis\\GM_38_Results.mid"
192 |
193 | IDR_MIDI_GM40 MIDI_GM "midis\\GM_39_Act_Clear.mid"
194 |
195 | IDR_MIDI_GM41 MIDI_GM "midis\\GM_40_S3_Life.mid"
196 |
197 | IDR_MIDI_GM42 MIDI_GM "midis\\GM_41_Emerald.mid"
198 |
199 | IDR_MIDI_GM43 MIDI_GM "midis\\GM_42_S3_Invinc.mid"
200 |
201 | IDR_MIDI_GM44 MIDI_GM "midis\\GM_43_2P_Menu.mid"
202 |
203 | IDR_MIDI_GM45 MIDI_GM "midis\\GM_44_Unused.mid"
204 |
205 | IDR_MIDI_GM46 MIDI_GM "midis\\GM_45_Options.mid"
206 |
207 | IDR_MIDI_GM47 MIDI_GM "midis\\GM_46_Final_Boss.mid"
208 |
209 | IDR_MIDI_GM48 MIDI_GM "midis\\GM_47_Timer.mid"
210 |
211 | IDR_MIDI_GM49 MIDI_GM "midis\\GM_48_S3_Clear.mid"
212 |
213 | IDR_MIDI_GM50 MIDI_GM "midis\\GM_49_S3_Credits.mid"
214 |
215 | IDR_MIDI_GM51 MIDI_GM "midis\\GM_50_S3K_Knuckles.mid"
216 |
217 | IDR_MIDI_GM52 MIDI_GM "midis\\GM_51_S3K_Title.mid"
218 |
219 | IDR_MIDI_GM53 MIDI_GM "midis\\GM_52_S3K_Life.mid"
220 |
221 | IDR_MIDI_GM54 MIDI_GM "midis\\GM_53_S3K_Invinc.mid"
222 |
223 | IDR_MIDI_GM55 MIDI_GM "midis\\GM_54_S3K_Clear.mid"
224 |
225 | IDR_MIDI_GM56 MIDI_GM "midis\\GM_55_S3K_Credits.mid"
226 |
227 | IDR_WAVE_SEGA WAVE "SEGA.wav"
228 |
--------------------------------------------------------------------------------
/SKCModLoader/SKCModLoader.vcxproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | Win32
7 |
8 |
9 | Release
10 | Win32
11 |
12 |
13 |
14 | {CF2F232B-5AF0-441B-9960-0A6898159F3E}
15 | Win32Proj
16 | SKCModLoader
17 | 7.0
18 |
19 |
20 |
21 | DynamicLibrary
22 | true
23 | v141_xp
24 | Unicode
25 |
26 |
27 | DynamicLibrary
28 | false
29 | v141_xp
30 | true
31 | Unicode
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 | true
45 | $(SolutionDir)$(Configuration)\
46 |
47 |
48 | false
49 | $(SolutionDir)$(Configuration)\
50 |
51 |
52 |
53 | Use
54 | Level3
55 | Disabled
56 | WIN32;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_DEBUG;_WINDOWS;_USRDLL;SKCMODLOADER_EXPORTS;%(PreprocessorDefinitions)
57 | ..\mod-loader-common\ModLoaderCommon;..\extlib\bass;..\extlib\smpsplay-dll;%(AdditionalIncludeDirectories)
58 |
59 |
60 | Windows
61 | true
62 | ..\bin\ModLoaderCommon.lib;..\extlib\bass\bass.lib;..\extlib\bass\bass_fx.lib;..\extlib\bass\bassmidi.lib;..\extlib\bass\bass_vgmstream.lib;..\extlib\smpsplay-dll\SMPSPlay.lib;Winmm.lib;%(AdditionalDependencies)
63 | false
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 | Level3
73 | Use
74 | MaxSpeed
75 | true
76 | true
77 | WIN32;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;NDEBUG;_WINDOWS;_USRDLL;SKCMODLOADER_EXPORTS;%(PreprocessorDefinitions)
78 | ..\mod-loader-common\ModLoaderCommon;..\extlib\bass;..\extlib\smpsplay-dll;%(AdditionalIncludeDirectories)
79 |
80 |
81 | Windows
82 | true
83 | true
84 | true
85 | ..\bin\ModLoaderCommon.lib;..\extlib\bass\bass.lib;..\extlib\bass\bass_fx.lib;..\extlib\bass\bassmidi.lib;..\extlib\bass\bass_vgmstream.lib;..\extlib\smpsplay-dll\SMPSPlay.lib;Winmm.lib;%(AdditionalDependencies)
86 | false
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 | false
108 |
109 |
110 | false
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 | Create
119 | Create
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
--------------------------------------------------------------------------------
/SKCModLoader/SKCModLoader.vcxproj.filters:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
7 |
8 |
9 | {93995380-89BD-4b04-88EB-625FBE52EBFB}
10 | h;hh;hpp;hxx;hm;inl;inc;xsd
11 |
12 |
13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | Header Files
23 |
24 |
25 | Header Files
26 |
27 |
28 | Header Files
29 |
30 |
31 | Header Files
32 |
33 |
34 | Header Files
35 |
36 |
37 | Header Files
38 |
39 |
40 | Header Files
41 |
42 |
43 |
44 |
45 | Source Files
46 |
47 |
48 | Source Files
49 |
50 |
51 | Source Files
52 |
53 |
54 | Source Files
55 |
56 |
57 | Source Files
58 |
59 |
60 |
61 |
62 | Resource Files
63 |
64 |
65 |
--------------------------------------------------------------------------------
/SKCModLoader/cpp.hint:
--------------------------------------------------------------------------------
1 | // Data pointer and array declarations.
2 | #define DataPointer(type, name, address) \
3 | static type &name = *(type *)address
4 | #define DataArray(type, name, address, len) \
5 | static DataArray_t name
6 |
7 | // Function pointer declarations.
8 | #define FunctionPointer(RETURN_TYPE, NAME, ARGS, ADDRESS) \
9 | static RETURN_TYPE (__cdecl *const NAME)ARGS = (RETURN_TYPE (__cdecl *)ARGS)ADDRESS
10 | #define StdcallFunctionPointer(RETURN_TYPE, NAME, ARGS, ADDRESS) \
11 | static RETURN_TYPE (__stdcall *const NAME)ARGS = (RETURN_TYPE (__stdcall *)ARGS)ADDRESS
12 | #define FastcallFunctionPointer(RETURN_TYPE, NAME, ARGS, ADDRESS) \
13 | static RETURN_TYPE (__fastcall *const NAME)ARGS = (RETURN_TYPE (__fastcall *)ARGS)ADDRESS
14 | #define ThiscallFunctionPointer(RETURN_TYPE, NAME, ARGS, ADDRESS) \
15 | static RETURN_TYPE (__thiscall *const NAME)ARGS = (RETURN_TYPE (__thiscall *)ARGS)ADDRESS
16 | #define VoidFunc(NAME, ADDRESS) FunctionPointer(void,NAME,(void),ADDRESS)
17 |
18 | // Non-static FunctionPointer.
19 | // If declaring a FunctionPointer within a function, use this one instead.
20 | // Otherwise, the program will crash on Windows XP.
21 | #define NonStaticFunctionPointer(RETURN_TYPE, NAME, ARGS, ADDRESS) \
22 | RETURN_TYPE (__cdecl *const NAME)ARGS = (RETURN_TYPE (__cdecl *)ARGS)ADDRESS
23 |
24 | #define ObjectFunc(NAME, ADDRESS) FunctionPointer(void,NAME,(ObjectMaster *obj),ADDRESS)
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_00_S3_Title.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_00_S3_Title.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_01_AIZ_1.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_01_AIZ_1.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_02_AIZ_2.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_02_AIZ_2.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_03_HCZ_1.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_03_HCZ_1.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_04_HCZ_2.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_04_HCZ_2.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_05_MGZ_1.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_05_MGZ_1.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_06_MGZ_2.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_06_MGZ_2.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_07_CNZ_1.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_07_CNZ_1.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_08_CNZ_2.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_08_CNZ_2.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_09_FBZ_1.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_09_FBZ_1.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_10_FBZ_2.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_10_FBZ_2.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_11_ICZ_1.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_11_ICZ_1.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_12_ICZ_2.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_12_ICZ_2.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_13_LBZ_1.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_13_LBZ_1.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_14_LBZ_2.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_14_LBZ_2.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_15_MHZ_1.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_15_MHZ_1.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_16_MHZ_2.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_16_MHZ_2.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_17_SZ_1.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_17_SZ_1.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_18_SZ_2.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_18_SZ_2.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_19_LRZ_1.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_19_LRZ_1.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_20_LRZ_2_HPZ.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_20_LRZ_2_HPZ.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_21_SSZ.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_21_SSZ.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_22_DEZ_1.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_22_DEZ_1.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_23_DEZ_2.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_23_DEZ_2.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_24_Act_1_Boss.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_24_Act_1_Boss.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_25_Act_2_Boss.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_25_Act_2_Boss.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_26_DDZ.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_26_DDZ.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_27_Glowing_Sphere.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_27_Glowing_Sphere.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_28_Special.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_28_Special.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_29_Slot.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_29_Slot.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_30_Gumball.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_30_Gumball.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_31_S3_Knuckles.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_31_S3_Knuckles.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_32_2P_ALZ.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_32_2P_ALZ.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_33_2P_BPZ.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_33_2P_BPZ.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_34_2P_DPZ.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_34_2P_DPZ.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_35_2P_CGZ.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_35_2P_CGZ.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_36_2P_EMZ.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_36_2P_EMZ.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_37_Game_Over.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_37_Game_Over.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_38_Results.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_38_Results.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_39_Act_Clear.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_39_Act_Clear.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_40_S3_Life.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_40_S3_Life.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_41_Emerald.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_41_Emerald.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_42_S3_Invinc.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_42_S3_Invinc.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_43_2P_Menu.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_43_2P_Menu.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_44_Unused.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_44_Unused.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_45_Options.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_45_Options.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_46_Final_Boss.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_46_Final_Boss.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_47_Timer.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_47_Timer.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_48_S3_Clear.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_48_S3_Clear.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_49_S3_Credits.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_49_S3_Credits.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_50_S3K_Knuckles.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_50_S3K_Knuckles.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_51_S3K_Title.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_51_S3K_Title.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_52_S3K_Life.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_52_S3K_Life.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_53_S3K_Invinc.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_53_S3K_Invinc.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_54_S3K_Clear.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_54_S3K_Clear.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/FM_55_S3K_Credits.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/FM_55_S3K_Credits.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_00_S3_Title.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_00_S3_Title.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_01_AIZ_1.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_01_AIZ_1.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_02_AIZ_2.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_02_AIZ_2.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_03_HCZ_1.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_03_HCZ_1.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_04_HCZ_2.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_04_HCZ_2.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_05_MGZ_1.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_05_MGZ_1.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_06_MGZ_2.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_06_MGZ_2.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_07_CNZ_1.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_07_CNZ_1.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_08_CNZ_2.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_08_CNZ_2.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_09_FBZ_1.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_09_FBZ_1.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_10_FBZ_2.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_10_FBZ_2.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_11_ICZ_1.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_11_ICZ_1.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_12_ICZ_2.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_12_ICZ_2.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_13_LBZ_1.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_13_LBZ_1.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_14_LBZ_2.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_14_LBZ_2.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_15_MHZ_1.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_15_MHZ_1.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_16_MHZ_2.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_16_MHZ_2.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_17_SZ_1.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_17_SZ_1.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_18_SZ_2.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_18_SZ_2.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_19_LRZ_1.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_19_LRZ_1.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_20_LRZ_2_HPZ.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_20_LRZ_2_HPZ.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_21_SSZ.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_21_SSZ.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_22_DEZ_1.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_22_DEZ_1.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_23_DEZ_2.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_23_DEZ_2.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_24_Act_1_Boss.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_24_Act_1_Boss.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_25_Act_2_Boss.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_25_Act_2_Boss.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_26_DDZ.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_26_DDZ.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_27_Glowing_Sphere.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_27_Glowing_Sphere.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_28_Special.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_28_Special.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_29_Slot.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_29_Slot.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_30_Gumball.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_30_Gumball.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_31_S3_Knuckles.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_31_S3_Knuckles.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_32_2P_ALZ.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_32_2P_ALZ.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_33_2P_BPZ.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_33_2P_BPZ.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_34_2P_DPZ.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_34_2P_DPZ.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_35_2P_CGZ.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_35_2P_CGZ.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_36_2P_EMZ.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_36_2P_EMZ.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_37_Game_Over.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_37_Game_Over.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_38_Results.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_38_Results.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_39_Act_Clear.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_39_Act_Clear.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_40_S3_Life.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_40_S3_Life.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_41_Emerald.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_41_Emerald.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_42_S3_Invinc.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_42_S3_Invinc.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_43_2P_Menu.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_43_2P_Menu.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_44_Unused.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_44_Unused.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_45_Options.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_45_Options.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_46_Final_Boss.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_46_Final_Boss.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_47_Timer.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_47_Timer.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_48_S3_Clear.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_48_S3_Clear.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_49_S3_Credits.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_49_S3_Credits.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_50_S3K_Knuckles.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_50_S3K_Knuckles.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_51_S3K_Title.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_51_S3K_Title.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_52_S3K_Life.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_52_S3K_Life.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_53_S3K_Invinc.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_53_S3K_Invinc.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_54_S3K_Clear.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_54_S3K_Clear.mid
--------------------------------------------------------------------------------
/SKCModLoader/midis/GM_55_S3K_Credits.mid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModLoader/midis/GM_55_S3K_Credits.mid
--------------------------------------------------------------------------------
/SKCModLoader/resource.h:
--------------------------------------------------------------------------------
1 | //{{NO_DEPENDENCIES}}
2 | // Microsoft Visual C++ generated include file.
3 | // Used by SKCModLoader.rc
4 | //
5 | #define IDR_MIDI_FM1 101
6 | #define IDR_MIDI_FM2 102
7 | #define IDR_MIDI_FM3 103
8 | #define IDR_MIDI_FM4 104
9 | #define IDR_MIDI_FM5 105
10 | #define IDR_MIDI_FM6 106
11 | #define IDR_MIDI_FM7 107
12 | #define IDR_MIDI_FM8 108
13 | #define IDR_MIDI_FM9 109
14 | #define IDR_MIDI_FM10 110
15 | #define IDR_MIDI_FM11 111
16 | #define IDR_MIDI_FM12 112
17 | #define IDR_MIDI_FM13 113
18 | #define IDR_MIDI_FM14 114
19 | #define IDR_MIDI_FM15 115
20 | #define IDR_MIDI_FM16 116
21 | #define IDR_MIDI_FM17 117
22 | #define IDR_MIDI_FM18 118
23 | #define IDR_MIDI_FM19 119
24 | #define IDR_MIDI_FM20 120
25 | #define IDR_MIDI_FM21 121
26 | #define IDR_MIDI_FM22 122
27 | #define IDR_MIDI_FM23 123
28 | #define IDR_MIDI_FM24 124
29 | #define IDR_MIDI_FM25 125
30 | #define IDR_MIDI_FM26 126
31 | #define IDR_MIDI_FM27 127
32 | #define IDR_MIDI_FM28 128
33 | #define IDR_MIDI_FM29 129
34 | #define IDR_MIDI_FM30 130
35 | #define IDR_MIDI_FM31 131
36 | #define IDR_MIDI_FM32 132
37 | #define IDR_MIDI_FM33 133
38 | #define IDR_MIDI_FM34 134
39 | #define IDR_MIDI_FM35 135
40 | #define IDR_MIDI_FM36 136
41 | #define IDR_MIDI_FM37 137
42 | #define IDR_MIDI_FM38 138
43 | #define IDR_MIDI_FM39 139
44 | #define IDR_MIDI_FM40 140
45 | #define IDR_MIDI_FM41 141
46 | #define IDR_MIDI_FM42 142
47 | #define IDR_MIDI_FM43 143
48 | #define IDR_MIDI_FM44 144
49 | #define IDR_MIDI_FM45 145
50 | #define IDR_MIDI_FM46 146
51 | #define IDR_MIDI_FM47 147
52 | #define IDR_MIDI_FM48 148
53 | #define IDR_MIDI_FM49 149
54 | #define IDR_MIDI_FM50 150
55 | #define IDR_MIDI_FM51 151
56 | #define IDR_MIDI_FM52 152
57 | #define IDR_MIDI_FM53 153
58 | #define IDR_MIDI_FM54 154
59 | #define IDR_MIDI_FM55 155
60 | #define IDR_MIDI_FM56 156
61 | #define IDR_MIDI_GM1 201
62 | #define IDR_MIDI_GM2 202
63 | #define IDR_MIDI_GM3 203
64 | #define IDR_MIDI_GM4 204
65 | #define IDR_MIDI_GM5 205
66 | #define IDR_MIDI_GM6 206
67 | #define IDR_MIDI_GM7 207
68 | #define IDR_MIDI_GM8 208
69 | #define IDR_MIDI_GM9 209
70 | #define IDR_MIDI_GM10 210
71 | #define IDR_MIDI_GM11 211
72 | #define IDR_MIDI_GM12 212
73 | #define IDR_MIDI_GM13 213
74 | #define IDR_MIDI_GM14 214
75 | #define IDR_MIDI_GM15 215
76 | #define IDR_MIDI_GM16 216
77 | #define IDR_MIDI_GM17 217
78 | #define IDR_MIDI_GM18 218
79 | #define IDR_MIDI_GM19 219
80 | #define IDR_MIDI_GM20 220
81 | #define IDR_MIDI_GM21 221
82 | #define IDR_MIDI_GM22 222
83 | #define IDR_MIDI_GM23 223
84 | #define IDR_MIDI_GM24 224
85 | #define IDR_MIDI_GM25 225
86 | #define IDR_MIDI_GM26 226
87 | #define IDR_MIDI_GM27 227
88 | #define IDR_MIDI_GM28 228
89 | #define IDR_MIDI_GM29 229
90 | #define IDR_MIDI_GM30 230
91 | #define IDR_MIDI_GM31 231
92 | #define IDR_MIDI_GM32 232
93 | #define IDR_MIDI_GM33 233
94 | #define IDR_MIDI_GM34 234
95 | #define IDR_MIDI_GM35 235
96 | #define IDR_MIDI_GM36 236
97 | #define IDR_MIDI_GM37 237
98 | #define IDR_MIDI_GM38 238
99 | #define IDR_MIDI_GM39 239
100 | #define IDR_MIDI_GM40 240
101 | #define IDR_MIDI_GM41 241
102 | #define IDR_MIDI_GM42 242
103 | #define IDR_MIDI_GM43 243
104 | #define IDR_MIDI_GM44 244
105 | #define IDR_MIDI_GM45 245
106 | #define IDR_MIDI_GM46 246
107 | #define IDR_MIDI_GM47 247
108 | #define IDR_MIDI_GM48 248
109 | #define IDR_MIDI_GM49 249
110 | #define IDR_MIDI_GM50 250
111 | #define IDR_MIDI_GM51 251
112 | #define IDR_MIDI_GM52 252
113 | #define IDR_MIDI_GM53 253
114 | #define IDR_MIDI_GM54 254
115 | #define IDR_MIDI_GM55 255
116 | #define IDR_MIDI_GM56 256
117 | #define IDR_WAVE_SEGA 301
118 |
119 | // Next default values for new objects
120 | //
121 | #ifdef APSTUDIO_INVOKED
122 | #ifndef APSTUDIO_READONLY_SYMBOLS
123 | #define _APS_NEXT_RESOURCE_VALUE 302
124 | #define _APS_NEXT_COMMAND_VALUE 40001
125 | #define _APS_NEXT_CONTROL_VALUE 1001
126 | #define _APS_NEXT_SYMED_VALUE 101
127 | #endif
128 | #endif
129 |
--------------------------------------------------------------------------------
/SKCModLoader/stdafx.cpp:
--------------------------------------------------------------------------------
1 | // stdafx.cpp : source file that includes just the standard includes
2 | // SKCModLoader.pch will be the pre-compiled header
3 | // stdafx.obj will contain the pre-compiled type information
4 |
5 | #include "stdafx.h"
6 |
7 | // TODO: reference any additional headers you need in STDAFX.H
8 | // and not in this file
9 |
--------------------------------------------------------------------------------
/SKCModLoader/stdafx.h:
--------------------------------------------------------------------------------
1 | // stdafx.h : include file for standard system include files,
2 | // or project specific include files that are used frequently, but
3 | // are changed infrequently
4 | //
5 |
6 | #pragma once
7 |
8 | #include "targetver.h"
9 |
10 | #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
11 | // Windows Header Files:
12 | #include
13 |
14 |
15 |
16 | // TODO: reference additional headers your program requires here
17 | #include
18 | #include
19 | #include
20 | #include
21 | #include
22 | #include
23 | #include
24 | #include
25 | #include
26 | #include
27 | #include
28 |
29 | #include "SKCModLoader.h"
--------------------------------------------------------------------------------
/SKCModLoader/targetver.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | // Including SDKDDKVer.h defines the highest available Windows platform.
4 |
5 | // If you wish to build your application for a previous Windows platform, include WinSDKVer.h and
6 | // set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h.
7 |
8 | #include
9 |
--------------------------------------------------------------------------------
/SKCModManager/App.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/SKCModManager/LoaderInfo.cs:
--------------------------------------------------------------------------------
1 | using ModManagerCommon;
2 | using System.Collections.Generic;
3 |
4 | namespace SKCModManager
5 | {
6 | enum Game
7 | {
8 | S3K,
9 | SK,
10 | S3
11 | }
12 |
13 | enum PaletteSetting
14 | {
15 | Accurate,
16 | Linear,
17 | SKC,
18 | Old
19 | }
20 |
21 | class SKCLoaderInfo : LoaderInfo
22 | {
23 | public bool DebugConsole { get; set; }
24 | public bool DebugFile { get; set; }
25 | public Game Game { get; set; }
26 | public PaletteSetting Palette { get; set; }
27 |
28 | public SKCLoaderInfo()
29 | {
30 | Mods = new List();
31 | EnabledCodes = new List();
32 | }
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/SKCModManager/ModInfo.cs:
--------------------------------------------------------------------------------
1 | using ModManagerCommon;
2 |
3 | namespace SKCModManager
4 | {
5 | class SKCModInfo : ModInfo
6 | {
7 | public string EXEFile { get; set; }
8 | public bool RedirectSaveFile { get; set; }
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/SKCModManager/NewModDialog.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.IO;
3 | using System.Windows.Forms;
4 | using IniFile;
5 |
6 | namespace SKCModManager
7 | {
8 | public partial class NewModDialog : Form
9 | {
10 | public NewModDialog()
11 | {
12 | InitializeComponent();
13 | }
14 |
15 | private void buttonOK_Click(object sender, EventArgs e)
16 | {
17 | string moddir = Path.Combine(Path.Combine(Environment.CurrentDirectory, "mods"), ValidateFilename(textModName.Text));
18 |
19 | if (textModName.Text.Length <= 0)
20 | {
21 | MessageBox.Show("You can't have a mod without a name.", "Invalid mod name", MessageBoxButtons.OK, MessageBoxIcon.Error);
22 | return;
23 | }
24 |
25 | try
26 | {
27 | if (Directory.Exists(moddir))
28 | {
29 | MessageBox.Show("A mod with that name already exists."
30 | + "\nPlease choose a different name or rename the existing one.", "Mod already exists",
31 | MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
32 | return;
33 | }
34 |
35 | Directory.CreateDirectory(moddir);
36 |
37 | if (checkRedirectSaveFile.Checked)
38 | {
39 | Directory.CreateDirectory(Path.Combine(moddir, "savedata"));
40 | }
41 |
42 | SKCModInfo newMod = new SKCModInfo
43 | {
44 | Name = textModName.Text,
45 | Author = textModAuthor.Text,
46 | Description = textModDescription.Text,
47 | Version = textVersion.Text,
48 | RedirectSaveFile = checkRedirectSaveFile.Checked,
49 | GitHubRepo = textGitHubRepo.Text,
50 | GitHubAsset = textGitHubAttachment.Text,
51 | UpdateUrl = textDirUrl.Text
52 | };
53 |
54 | IniSerializer.Serialize(newMod, Path.Combine(moddir, "mod.ini"));
55 |
56 | if (checkOpenFolder.Checked)
57 | {
58 | System.Diagnostics.Process.Start(moddir);
59 | }
60 |
61 | DialogResult = DialogResult.OK;
62 | Close();
63 | }
64 | catch (Exception error)
65 | {
66 | MessageBox.Show(this, error.Message, "Mod Creation Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
67 | }
68 | }
69 |
70 | static string ValidateFilename(string filename)
71 | {
72 | string result = filename;
73 |
74 | foreach (char c in Path.GetInvalidFileNameChars())
75 | result = result.Replace(c, '_');
76 |
77 | return result;
78 | }
79 | }
80 | }
81 |
--------------------------------------------------------------------------------
/SKCModManager/NewModDialog.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 | 17, 17
122 |
123 |
--------------------------------------------------------------------------------
/SKCModManager/Program.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.Win32;
2 | using ModManagerCommon;
3 | using ModManagerCommon.Forms;
4 | using System;
5 | using System.Collections.Generic;
6 | using System.IO;
7 | using System.IO.Pipes;
8 | using System.Linq;
9 | using System.Threading;
10 | using System.Windows.Forms;
11 |
12 | namespace SKCModManager
13 | {
14 | static class Program
15 | {
16 | private const string pipeName = "skc-mod-manager";
17 | private const string protocol = "skcmm:";
18 | private static readonly Mutex mutex = new Mutex(true, pipeName);
19 | public static UriQueue UriQueue;
20 |
21 | ///
22 | /// The main entry point for the application.
23 | ///
24 | [STAThread]
25 | static void Main(string[] args)
26 | {
27 | if (args.Length > 0 && args[0] == "urlhandler")
28 | {
29 | using (var hkcr = Registry.ClassesRoot)
30 | using (var key = hkcr.CreateSubKey("skcmm"))
31 | {
32 | key.SetValue(null, "URL:S&KC Mod Manager Protocol");
33 | key.SetValue("URL Protocol", string.Empty);
34 | using (var k2 = key.CreateSubKey("DefaultIcon"))
35 | k2.SetValue(null, Application.ExecutablePath + ",1");
36 | using (var k3 = key.CreateSubKey("shell"))
37 | using (var k4 = k3.CreateSubKey("open"))
38 | using (var k5 = k4.CreateSubKey("command"))
39 | k5.SetValue(null, $"\"{Application.ExecutablePath}\" \"%1\"");
40 | }
41 | return;
42 | }
43 |
44 | bool alreadyRunning;
45 | try { alreadyRunning = !mutex.WaitOne(0, true); }
46 | catch (AbandonedMutexException) { alreadyRunning = false; }
47 |
48 | if (args.Length > 1 && args[0] == "doupdate")
49 | {
50 | if (alreadyRunning)
51 | try { mutex.WaitOne(); }
52 | catch (AbandonedMutexException) { }
53 | Application.EnableVisualStyles();
54 | Application.SetCompatibleTextRenderingDefault(false);
55 | Application.Run(new LoaderManifestDialog(args[1]));
56 | return;
57 | }
58 |
59 | if (args.Length > 1 && args[0] == "cleanupdate")
60 | {
61 | if (alreadyRunning)
62 | try { mutex.WaitOne(); }
63 | catch (AbandonedMutexException) { }
64 | alreadyRunning = false;
65 | Thread.Sleep(1000);
66 | try
67 | {
68 | File.Delete(args[1] + ".7z");
69 | Directory.Delete(args[1], true);
70 | }
71 | catch { }
72 | }
73 |
74 | if (!alreadyRunning)
75 | {
76 | UriQueue = new UriQueue(pipeName);
77 | }
78 |
79 | List uris = args
80 | .Where(x => x.Length > protocol.Length && x.StartsWith(protocol, StringComparison.Ordinal))
81 | .ToList();
82 |
83 | if (uris.Count > 0)
84 | {
85 | using (var pipe = new NamedPipeClientStream(".", pipeName, PipeDirection.Out))
86 | {
87 | pipe.Connect();
88 |
89 | var writer = new StreamWriter(pipe);
90 | foreach (string s in uris)
91 | {
92 | writer.WriteLine(s);
93 | }
94 | writer.Flush();
95 | }
96 | }
97 |
98 | if (alreadyRunning)
99 | {
100 | return;
101 | }
102 |
103 | Application.EnableVisualStyles();
104 | Application.SetCompatibleTextRenderingDefault(false);
105 | Application.Run(new MainForm());
106 | UriQueue.Close();
107 | }
108 | }
109 | }
110 |
--------------------------------------------------------------------------------
/SKCModManager/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("SKCModManager")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("SKCModManager")]
13 | [assembly: AssemblyCopyright("Copyright © 2015")]
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("76e0794c-4983-49af-ad74-26b4575e3b31")]
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("1.0.0.0")]
36 | [assembly: AssemblyFileVersion("1.0.0.0")]
37 |
--------------------------------------------------------------------------------
/SKCModManager/Properties/Resources.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 SKCModManager.Properties {
12 | using System;
13 |
14 |
15 | ///
16 | /// A strongly-typed resource class, for looking up localized strings, etc.
17 | ///
18 | // This class was auto-generated by the StronglyTypedResourceBuilder
19 | // class via a tool like ResGen or Visual Studio.
20 | // To add or remove a member, edit your .ResX file then rerun ResGen
21 | // with the /str option, or rebuild your VS project.
22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 | internal class Resources {
26 |
27 | private static global::System.Resources.ResourceManager resourceMan;
28 |
29 | private static global::System.Globalization.CultureInfo resourceCulture;
30 |
31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
32 | internal Resources() {
33 | }
34 |
35 | ///
36 | /// Returns the cached ResourceManager instance used by this class.
37 | ///
38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
39 | internal static global::System.Resources.ResourceManager ResourceManager {
40 | get {
41 | if (object.ReferenceEquals(resourceMan, null)) {
42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SKCModManager.Properties.Resources", typeof(Resources).Assembly);
43 | resourceMan = temp;
44 | }
45 | return resourceMan;
46 | }
47 | }
48 |
49 | ///
50 | /// Overrides the current thread's CurrentUICulture property for all
51 | /// resource lookups using this strongly typed resource class.
52 | ///
53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
54 | internal static global::System.Globalization.CultureInfo Culture {
55 | get {
56 | return resourceCulture;
57 | }
58 | set {
59 | resourceCulture = value;
60 | }
61 | }
62 |
63 | ///
64 | /// Looks up a localized string similar to This can cause MOD USER DATA (SAVE FILES, CONFIG FILES) TO BE LOST upon next update! To prevent this, you should never run this on mods you did not develop.
65 | ///
66 | ///Are you sure you wish to continue?.
67 | ///
68 | internal static string GenerateManifestWarning {
69 | get {
70 | return ResourceManager.GetString("GenerateManifestWarning", resourceCulture);
71 | }
72 | }
73 | }
74 | }
75 |
--------------------------------------------------------------------------------
/SKCModManager/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 can cause MOD USER DATA (SAVE FILES, CONFIG FILES) TO BE LOST upon next update! To prevent this, you should never run this on mods you did not develop.
122 |
123 | Are you sure you wish to continue?
124 |
125 |
--------------------------------------------------------------------------------
/SKCModManager/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 SKCModManager.Properties {
12 |
13 |
14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.5.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 |
--------------------------------------------------------------------------------
/SKCModManager/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/SKCModManager/SKCModManager.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {8AD6CBA4-E931-40F7-A810-3E8D7E05B006}
8 | WinExe
9 | Properties
10 | SKCModManager
11 | SKCModManager
12 | v4.0
13 | 512
14 |
15 |
16 |
17 | AnyCPU
18 | true
19 | full
20 | false
21 | ..\Debug\
22 | DEBUG;TRACE
23 | prompt
24 | 4
25 |
26 |
27 | AnyCPU
28 | pdbonly
29 | true
30 | ..\Release\
31 | TRACE
32 | prompt
33 | 4
34 |
35 |
36 | SONIC3K.ICO
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 | Form
48 |
49 |
50 | MainForm.cs
51 |
52 |
53 |
54 | Form
55 |
56 |
57 | NewModDialog.cs
58 |
59 |
60 |
61 |
62 | MainForm.cs
63 |
64 |
65 | NewModDialog.cs
66 |
67 |
68 | ResXFileCodeGenerator
69 | Resources.Designer.cs
70 | Designer
71 |
72 |
73 | True
74 | Resources.resx
75 | True
76 |
77 |
78 | SettingsSingleFileGenerator
79 | Settings.Designer.cs
80 |
81 |
82 | True
83 | Settings.settings
84 | True
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 | {4a480502-79b5-4e1e-8d67-16c514bb13cd}
93 | ModManagerCommon
94 |
95 |
96 |
97 |
98 |
99 |
100 |
107 |
--------------------------------------------------------------------------------
/SKCModManager/SONIC3K.ICO:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/SKCModManager/SONIC3K.ICO
--------------------------------------------------------------------------------
/data/Codes.lst:
--------------------------------------------------------------------------------
1 | Patch "Infinite Lives"
2 | write8 00438805 0xE9
3 | write32 00438806 0x8F
4 |
5 | Patch "Don't Lose Rings When Hit"
6 | writenop 0076258A 6
7 |
8 | Patch "Infinite Time"
9 | writenop 004126B1 2
10 |
11 | Patch "Don't Lose Shield When Hit"
12 | writenop 00422C34 3
13 |
14 | Patch "Keep Rings Between Levels"
15 | writenop 004167EE 6
16 | writenop 0041AF0C 6
17 |
18 | Patch "Don't Lose Rings When Super/Hyper"
19 | writenop 00436F02 6
20 |
21 | Patch "Can't Drown"
22 | writenop 0042C4EC 3
23 |
24 | Code "Infinite Rings"
25 | write16 08FFFE20 999
26 |
27 | Code "Have All Chaos Emeralds"
28 | write8 08FFFFB0 7
29 |
30 | Code "Have All Super Emeralds"
31 | write8 08FFFFB1 7
32 |
33 | Patch "Tails Can Fly Forever"
34 | writenop 0043E5CD 3
35 |
36 | Patch "Infinite Double Jumps"
37 | writenop 00436B96 3
38 | writenop 00436BAF 3
39 |
40 | Patch "Infinite Fire Dashes"
41 | writenop 00436AF7 3
42 |
43 | Patch "Infinite Insta-Shields"
44 | writenop 00436C73 3
45 |
46 | Patch "Infinite Hyper Dashes"
47 | writenop 00436D82 3
48 |
49 | Patch "Special Stage: Never Speed Up"
50 | write16 0069FB16 0xE990
51 |
52 | Patch "Special Stage: Remove Speed Cap"
53 | writenop 0069FB16 6
54 |
55 | Patch "Special Stage: Speed Up Twice As Quickly"
56 | write16 0069FAF1 900
57 | write16 0069FB04 1350
58 | write16 0069E1FD 900
59 | write16 0069E210 1350
60 |
61 | Patch "Special Stage: Start At Max Speed"
62 | write16 0069E1F3 0x2000
63 |
64 | Patch "Special Stage: Start At Double Max Speed"
65 | write16 0069E1F3 0x4000
66 |
--------------------------------------------------------------------------------
/data/OPL-3_FM_128M.sf2:
--------------------------------------------------------------------------------
1 | version https://git-lfs.github.com/spec/v1
2 | oid sha256:39bff96eee3dcfbce9665e3968701b894ca2136c7d0bd580281b2bbf59e80392
3 | size 135020964
4 |
--------------------------------------------------------------------------------
/extlib/bass/COPYING_BASS_VGMSTREAM:
--------------------------------------------------------------------------------
1 | Copyright (c) 2011, angryzor
2 |
3 | Permission to use, copy, modify, and/or distribute this software for any
4 | purpose with or without fee is hereby granted, provided that the above
5 | copyright notice and this permission notice appear in all copies.
6 |
7 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
10 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
12 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
13 | OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
14 |
--------------------------------------------------------------------------------
/extlib/bass/COPYING_VGMSTREAM:
--------------------------------------------------------------------------------
1 | Copyright (c) 2008-2009 Adam Gashlin, Fastelbja, Ronny Elfert
2 |
3 | Portions Copyright (c) 2004-2008, Marko Kreen
4 | Portions Copyright 2001-2007 jagarl / Kazunori Ueno
5 | Portions Copyright (c) 1998, Justin Frankel/Nullsoft Inc.
6 | Portions Copyright (C) 2006 Nullsoft, Inc.
7 | Portions Copyright (c) 2005-2007 Paul Hsieh
8 | Portions Public Domain originating with Sun Microsystems
9 |
10 | Permission to use, copy, modify, and distribute this software for any
11 | purpose with or without fee is hereby granted, provided that the above
12 | copyright notice and this permission notice appear in all copies.
13 |
14 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
15 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
16 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
17 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
18 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
19 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
20 | OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
21 |
--------------------------------------------------------------------------------
/extlib/bass/avcodec-vgmstream-58.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/extlib/bass/avcodec-vgmstream-58.dll
--------------------------------------------------------------------------------
/extlib/bass/avformat-vgmstream-58.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/extlib/bass/avformat-vgmstream-58.dll
--------------------------------------------------------------------------------
/extlib/bass/avutil-vgmstream-56.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/extlib/bass/avutil-vgmstream-56.dll
--------------------------------------------------------------------------------
/extlib/bass/bass.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/extlib/bass/bass.dll
--------------------------------------------------------------------------------
/extlib/bass/bass.lib:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/extlib/bass/bass.lib
--------------------------------------------------------------------------------
/extlib/bass/bass_fx.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/extlib/bass/bass_fx.dll
--------------------------------------------------------------------------------
/extlib/bass/bass_fx.lib:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/extlib/bass/bass_fx.lib
--------------------------------------------------------------------------------
/extlib/bass/bass_vgmstream.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/extlib/bass/bass_vgmstream.dll
--------------------------------------------------------------------------------
/extlib/bass/bass_vgmstream.h:
--------------------------------------------------------------------------------
1 | #ifndef _BASS_VGMSTREAM_H_
2 | #define _BASS_VGMSTREAM_H_
3 |
4 |
5 | #ifdef BASS_VGMSTREAM_EXPORTS
6 | #define BASS_VGMSTREAM_API __declspec(dllexport)
7 | #else
8 | #define BASS_VGMSTREAM_API __declspec(dllimport)
9 | #endif
10 |
11 | #include "bass.h"
12 |
13 |
14 | #ifdef __cplusplus
15 | extern "C"
16 | {
17 | #endif
18 |
19 | BASS_VGMSTREAM_API HSTREAM BASS_VGMSTREAM_StreamCreate(const char* file, DWORD flags);
20 |
21 | #ifdef __cplusplus
22 | }
23 | #endif
24 |
25 |
26 | #endif
--------------------------------------------------------------------------------
/extlib/bass/bass_vgmstream.lib:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/extlib/bass/bass_vgmstream.lib
--------------------------------------------------------------------------------
/extlib/bass/bassflac.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/extlib/bass/bassflac.dll
--------------------------------------------------------------------------------
/extlib/bass/bassmidi.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/extlib/bass/bassmidi.dll
--------------------------------------------------------------------------------
/extlib/bass/bassmidi.h:
--------------------------------------------------------------------------------
1 | /*
2 | BASSMIDI 2.4 C/C++ header file
3 | Copyright (c) 2006-2017 Un4seen Developments Ltd.
4 |
5 | See the BASSMIDI.CHM file for more detailed documentation
6 | */
7 |
8 | #ifndef BASSMIDI_H
9 | #define BASSMIDI_H
10 |
11 | #include "bass.h"
12 |
13 | #if BASSVERSION!=0x204
14 | #error conflicting BASS and BASSMIDI versions
15 | #endif
16 |
17 | #ifdef __cplusplus
18 | extern "C" {
19 | #endif
20 |
21 | #ifndef BASSMIDIDEF
22 | #define BASSMIDIDEF(f) WINAPI f
23 | #endif
24 |
25 | typedef DWORD HSOUNDFONT; // soundfont handle
26 |
27 | // Additional BASS_SetConfig options
28 | #define BASS_CONFIG_MIDI_COMPACT 0x10400
29 | #define BASS_CONFIG_MIDI_VOICES 0x10401
30 | #define BASS_CONFIG_MIDI_AUTOFONT 0x10402
31 | #define BASS_CONFIG_MIDI_IN_PORTS 0x10404
32 |
33 | // Additional BASS_SetConfigPtr options
34 | #define BASS_CONFIG_MIDI_DEFFONT 0x10403
35 |
36 | // Additional sync types
37 | #define BASS_SYNC_MIDI_MARK 0x10000
38 | #define BASS_SYNC_MIDI_MARKER 0x10000
39 | #define BASS_SYNC_MIDI_CUE 0x10001
40 | #define BASS_SYNC_MIDI_LYRIC 0x10002
41 | #define BASS_SYNC_MIDI_TEXT 0x10003
42 | #define BASS_SYNC_MIDI_EVENT 0x10004
43 | #define BASS_SYNC_MIDI_TICK 0x10005
44 | #define BASS_SYNC_MIDI_TIMESIG 0x10006
45 | #define BASS_SYNC_MIDI_KEYSIG 0x10007
46 |
47 | // Additional BASS_MIDI_StreamCreateFile/etc flags
48 | #define BASS_MIDI_NOSYSRESET 0x800
49 | #define BASS_MIDI_DECAYEND 0x1000
50 | #define BASS_MIDI_NOFX 0x2000
51 | #define BASS_MIDI_DECAYSEEK 0x4000
52 | #define BASS_MIDI_NOCROP 0x8000
53 | #define BASS_MIDI_NOTEOFF1 0x10000
54 | #define BASS_MIDI_SINCINTER 0x800000
55 |
56 | // BASS_MIDI_FontInit flags
57 | #define BASS_MIDI_FONT_MEM 0x10000
58 | #define BASS_MIDI_FONT_MMAP 0x20000
59 | #define BASS_MIDI_FONT_XGDRUMS 0x40000
60 | #define BASS_MIDI_FONT_NOFX 0x80000
61 |
62 | typedef struct {
63 | HSOUNDFONT font; // soundfont
64 | int preset; // preset number (-1=all)
65 | int bank;
66 | } BASS_MIDI_FONT;
67 |
68 | typedef struct {
69 | HSOUNDFONT font; // soundfont
70 | int spreset; // source preset number
71 | int sbank; // source bank number
72 | int dpreset; // destination preset/program number
73 | int dbank; // destination bank number
74 | int dbanklsb; // destination bank number LSB
75 | } BASS_MIDI_FONTEX;
76 |
77 | // BASS_MIDI_StreamSet/GetFonts flag
78 | #define BASS_MIDI_FONT_EX 0x1000000 // BASS_MIDI_FONTEX
79 |
80 | typedef struct {
81 | const char *name;
82 | const char *copyright;
83 | const char *comment;
84 | DWORD presets; // number of presets/instruments
85 | DWORD samsize; // total size (in bytes) of the sample data
86 | DWORD samload; // amount of sample data currently loaded
87 | DWORD samtype; // sample format (CTYPE) if packed
88 | } BASS_MIDI_FONTINFO;
89 |
90 | typedef struct {
91 | DWORD track; // track containing marker
92 | DWORD pos; // marker position
93 | const char *text; // marker text
94 | } BASS_MIDI_MARK;
95 |
96 | // Marker types
97 | #define BASS_MIDI_MARK_MARKER 0 // marker
98 | #define BASS_MIDI_MARK_CUE 1 // cue point
99 | #define BASS_MIDI_MARK_LYRIC 2 // lyric
100 | #define BASS_MIDI_MARK_TEXT 3 // text
101 | #define BASS_MIDI_MARK_TIMESIG 4 // time signature
102 | #define BASS_MIDI_MARK_KEYSIG 5 // key signature
103 | #define BASS_MIDI_MARK_COPY 6 // copyright notice
104 | #define BASS_MIDI_MARK_TRACK 7 // track name
105 | #define BASS_MIDI_MARK_INST 8 // instrument name
106 | #define BASS_MIDI_MARK_TRACKSTART 9 // track start (SMF2)
107 | #define BASS_MIDI_MARK_TICK 0x10000 // flag: get position in ticks (otherwise bytes)
108 |
109 | // MIDI events
110 | #define MIDI_EVENT_NOTE 1
111 | #define MIDI_EVENT_PROGRAM 2
112 | #define MIDI_EVENT_CHANPRES 3
113 | #define MIDI_EVENT_PITCH 4
114 | #define MIDI_EVENT_PITCHRANGE 5
115 | #define MIDI_EVENT_DRUMS 6
116 | #define MIDI_EVENT_FINETUNE 7
117 | #define MIDI_EVENT_COARSETUNE 8
118 | #define MIDI_EVENT_MASTERVOL 9
119 | #define MIDI_EVENT_BANK 10
120 | #define MIDI_EVENT_MODULATION 11
121 | #define MIDI_EVENT_VOLUME 12
122 | #define MIDI_EVENT_PAN 13
123 | #define MIDI_EVENT_EXPRESSION 14
124 | #define MIDI_EVENT_SUSTAIN 15
125 | #define MIDI_EVENT_SOUNDOFF 16
126 | #define MIDI_EVENT_RESET 17
127 | #define MIDI_EVENT_NOTESOFF 18
128 | #define MIDI_EVENT_PORTAMENTO 19
129 | #define MIDI_EVENT_PORTATIME 20
130 | #define MIDI_EVENT_PORTANOTE 21
131 | #define MIDI_EVENT_MODE 22
132 | #define MIDI_EVENT_REVERB 23
133 | #define MIDI_EVENT_CHORUS 24
134 | #define MIDI_EVENT_CUTOFF 25
135 | #define MIDI_EVENT_RESONANCE 26
136 | #define MIDI_EVENT_RELEASE 27
137 | #define MIDI_EVENT_ATTACK 28
138 | #define MIDI_EVENT_DECAY 29
139 | #define MIDI_EVENT_REVERB_MACRO 30
140 | #define MIDI_EVENT_CHORUS_MACRO 31
141 | #define MIDI_EVENT_REVERB_TIME 32
142 | #define MIDI_EVENT_REVERB_DELAY 33
143 | #define MIDI_EVENT_REVERB_LOCUTOFF 34
144 | #define MIDI_EVENT_REVERB_HICUTOFF 35
145 | #define MIDI_EVENT_REVERB_LEVEL 36
146 | #define MIDI_EVENT_CHORUS_DELAY 37
147 | #define MIDI_EVENT_CHORUS_DEPTH 38
148 | #define MIDI_EVENT_CHORUS_RATE 39
149 | #define MIDI_EVENT_CHORUS_FEEDBACK 40
150 | #define MIDI_EVENT_CHORUS_LEVEL 41
151 | #define MIDI_EVENT_CHORUS_REVERB 42
152 | #define MIDI_EVENT_USERFX 43
153 | #define MIDI_EVENT_USERFX_LEVEL 44
154 | #define MIDI_EVENT_USERFX_REVERB 45
155 | #define MIDI_EVENT_USERFX_CHORUS 46
156 | #define MIDI_EVENT_DRUM_FINETUNE 50
157 | #define MIDI_EVENT_DRUM_COARSETUNE 51
158 | #define MIDI_EVENT_DRUM_PAN 52
159 | #define MIDI_EVENT_DRUM_REVERB 53
160 | #define MIDI_EVENT_DRUM_CHORUS 54
161 | #define MIDI_EVENT_DRUM_CUTOFF 55
162 | #define MIDI_EVENT_DRUM_RESONANCE 56
163 | #define MIDI_EVENT_DRUM_LEVEL 57
164 | #define MIDI_EVENT_DRUM_USERFX 58
165 | #define MIDI_EVENT_SOFT 60
166 | #define MIDI_EVENT_SYSTEM 61
167 | #define MIDI_EVENT_TEMPO 62
168 | #define MIDI_EVENT_SCALETUNING 63
169 | #define MIDI_EVENT_CONTROL 64
170 | #define MIDI_EVENT_CHANPRES_VIBRATO 65
171 | #define MIDI_EVENT_CHANPRES_PITCH 66
172 | #define MIDI_EVENT_CHANPRES_FILTER 67
173 | #define MIDI_EVENT_CHANPRES_VOLUME 68
174 | #define MIDI_EVENT_MOD_VIBRATO 69
175 | #define MIDI_EVENT_MODRANGE 69
176 | #define MIDI_EVENT_BANK_LSB 70
177 | #define MIDI_EVENT_KEYPRES 71
178 | #define MIDI_EVENT_KEYPRES_VIBRATO 72
179 | #define MIDI_EVENT_KEYPRES_PITCH 73
180 | #define MIDI_EVENT_KEYPRES_FILTER 74
181 | #define MIDI_EVENT_KEYPRES_VOLUME 75
182 | #define MIDI_EVENT_SOSTENUTO 76
183 | #define MIDI_EVENT_MOD_PITCH 77
184 | #define MIDI_EVENT_MOD_FILTER 78
185 | #define MIDI_EVENT_MOD_VOLUME 79
186 | #define MIDI_EVENT_MIXLEVEL 0x10000
187 | #define MIDI_EVENT_TRANSPOSE 0x10001
188 | #define MIDI_EVENT_SYSTEMEX 0x10002
189 | #define MIDI_EVENT_SPEED 0x10004
190 |
191 | #define MIDI_EVENT_END 0
192 | #define MIDI_EVENT_END_TRACK 0x10003
193 |
194 | #define MIDI_EVENT_NOTES 0x20000
195 | #define MIDI_EVENT_VOICES 0x20001
196 |
197 | #define MIDI_SYSTEM_DEFAULT 0
198 | #define MIDI_SYSTEM_GM1 1
199 | #define MIDI_SYSTEM_GM2 2
200 | #define MIDI_SYSTEM_XG 3
201 | #define MIDI_SYSTEM_GS 4
202 |
203 | typedef struct {
204 | DWORD event; // MIDI_EVENT_xxx
205 | DWORD param;
206 | DWORD chan;
207 | DWORD tick; // event position (ticks)
208 | DWORD pos; // event position (bytes)
209 | } BASS_MIDI_EVENT;
210 |
211 | // BASS_MIDI_StreamEvents modes
212 | #define BASS_MIDI_EVENTS_STRUCT 0 // BASS_MIDI_EVENT structures
213 | #define BASS_MIDI_EVENTS_RAW 0x10000 // raw MIDI event data
214 | #define BASS_MIDI_EVENTS_SYNC 0x1000000 // flag: trigger event syncs
215 | #define BASS_MIDI_EVENTS_NORSTATUS 0x2000000 // flag: no running status
216 | #define BASS_MIDI_EVENTS_CANCEL 0x4000000 // flag: cancel pending events
217 | #define BASS_MIDI_EVENTS_TIME 0x8000000 // flag: delta-time info is present
218 |
219 | // BASS_MIDI_StreamGetChannel special channels
220 | #define BASS_MIDI_CHAN_CHORUS (DWORD)-1
221 | #define BASS_MIDI_CHAN_REVERB (DWORD)-2
222 | #define BASS_MIDI_CHAN_USERFX (DWORD)-3
223 |
224 | // BASS_CHANNELINFO type
225 | #define BASS_CTYPE_STREAM_MIDI 0x10d00
226 |
227 | // Additional attributes
228 | #define BASS_ATTRIB_MIDI_PPQN 0x12000
229 | #define BASS_ATTRIB_MIDI_CPU 0x12001
230 | #define BASS_ATTRIB_MIDI_CHANS 0x12002
231 | #define BASS_ATTRIB_MIDI_VOICES 0x12003
232 | #define BASS_ATTRIB_MIDI_VOICES_ACTIVE 0x12004
233 | #define BASS_ATTRIB_MIDI_STATE 0x12005
234 | #define BASS_ATTRIB_MIDI_SRC 0x12006
235 | #define BASS_ATTRIB_MIDI_KILL 0x12007
236 | #define BASS_ATTRIB_MIDI_TRACK_VOL 0x12100 // + track #
237 |
238 | // Additional tag type
239 | #define BASS_TAG_MIDI_TRACK 0x11000 // + track #, track text : array of null-terminated ANSI strings
240 |
241 | // BASS_ChannelGetLength/GetPosition/SetPosition mode
242 | #define BASS_POS_MIDI_TICK 2 // tick position
243 |
244 | typedef BOOL (CALLBACK MIDIFILTERPROC)(HSTREAM handle, DWORD track, BASS_MIDI_EVENT *event, BOOL seeking, void *user);
245 | /* Event filtering callback function.
246 | handle : MIDI stream handle
247 | track : Track containing the event
248 | event : The event
249 | seeking: TRUE = the event is being processed while seeking, FALSE = it is being played
250 | user : The 'user' parameter value given when calling BASS_MIDI_StreamSetFilter
251 | RETURN : TRUE = process the event, FALSE = drop the event */
252 |
253 | // BASS_MIDI_FontPack flags
254 | #define BASS_MIDI_PACK_NOHEAD 1 // don't send a WAV header to the encoder
255 | #define BASS_MIDI_PACK_16BIT 2 // discard low 8 bits of 24-bit sample data
256 |
257 | typedef struct {
258 | const char *name; // description
259 | DWORD id;
260 | DWORD flags;
261 | } BASS_MIDI_DEVICEINFO;
262 |
263 | typedef void (CALLBACK MIDIINPROC)(DWORD device, double time, const BYTE *buffer, DWORD length, void *user);
264 | /* MIDI input callback function.
265 | device : MIDI input device
266 | time : Timestamp
267 | buffer : Buffer containing MIDI data
268 | length : Number of bytes of data
269 | user : The 'user' parameter value given when calling BASS_MIDI_InInit */
270 |
271 | HSTREAM BASSMIDIDEF(BASS_MIDI_StreamCreate)(DWORD channels, DWORD flags, DWORD freq);
272 | HSTREAM BASSMIDIDEF(BASS_MIDI_StreamCreateFile)(BOOL mem, const void *file, QWORD offset, QWORD length, DWORD flags, DWORD freq);
273 | HSTREAM BASSMIDIDEF(BASS_MIDI_StreamCreateURL)(const char *url, DWORD offset, DWORD flags, DOWNLOADPROC *proc, void *user, DWORD freq);
274 | HSTREAM BASSMIDIDEF(BASS_MIDI_StreamCreateFileUser)(DWORD system, DWORD flags, const BASS_FILEPROCS *procs, void *user, DWORD freq);
275 | HSTREAM BASSMIDIDEF(BASS_MIDI_StreamCreateEvents)(const BASS_MIDI_EVENT *events, DWORD ppqn, DWORD flags, DWORD freq);
276 | BOOL BASSMIDIDEF(BASS_MIDI_StreamGetMark)(HSTREAM handle, DWORD type, DWORD index, BASS_MIDI_MARK *mark);
277 | DWORD BASSMIDIDEF(BASS_MIDI_StreamGetMarks)(HSTREAM handle, int track, DWORD type, BASS_MIDI_MARK *marks);
278 | BOOL BASSMIDIDEF(BASS_MIDI_StreamSetFonts)(HSTREAM handle, const void *fonts, DWORD count);
279 | DWORD BASSMIDIDEF(BASS_MIDI_StreamGetFonts)(HSTREAM handle, void *fonts, DWORD count);
280 | BOOL BASSMIDIDEF(BASS_MIDI_StreamLoadSamples)(HSTREAM handle);
281 | BOOL BASSMIDIDEF(BASS_MIDI_StreamEvent)(HSTREAM handle, DWORD chan, DWORD event, DWORD param);
282 | DWORD BASSMIDIDEF(BASS_MIDI_StreamEvents)(HSTREAM handle, DWORD mode, const void *events, DWORD length);
283 | DWORD BASSMIDIDEF(BASS_MIDI_StreamGetEvent)(HSTREAM handle, DWORD chan, DWORD event);
284 | DWORD BASSMIDIDEF(BASS_MIDI_StreamGetEvents)(HSTREAM handle, int track, DWORD filter, BASS_MIDI_EVENT *events);
285 | DWORD BASSMIDIDEF(BASS_MIDI_StreamGetEventsEx)(HSTREAM handle, int track, DWORD filter, BASS_MIDI_EVENT *events, DWORD start, DWORD count);
286 | BOOL BASSMIDIDEF(BASS_MIDI_StreamGetPreset)(HSTREAM handle, DWORD chan, BASS_MIDI_FONT *font);
287 | HSTREAM BASSMIDIDEF(BASS_MIDI_StreamGetChannel)(HSTREAM handle, DWORD chan);
288 | BOOL BASSMIDIDEF(BASS_MIDI_StreamSetFilter)(HSTREAM handle, BOOL seeking, MIDIFILTERPROC *proc, void *user);
289 |
290 | HSOUNDFONT BASSMIDIDEF(BASS_MIDI_FontInit)(const void *file, DWORD flags);
291 | HSOUNDFONT BASSMIDIDEF(BASS_MIDI_FontInitUser)(const BASS_FILEPROCS *procs, void *user, DWORD flags);
292 | BOOL BASSMIDIDEF(BASS_MIDI_FontFree)(HSOUNDFONT handle);
293 | BOOL BASSMIDIDEF(BASS_MIDI_FontGetInfo)(HSOUNDFONT handle, BASS_MIDI_FONTINFO *info);
294 | BOOL BASSMIDIDEF(BASS_MIDI_FontGetPresets)(HSOUNDFONT handle, DWORD *presets);
295 | const char *BASSMIDIDEF(BASS_MIDI_FontGetPreset)(HSOUNDFONT handle, int preset, int bank);
296 | BOOL BASSMIDIDEF(BASS_MIDI_FontLoad)(HSOUNDFONT handle, int preset, int bank);
297 | BOOL BASSMIDIDEF(BASS_MIDI_FontUnload)(HSOUNDFONT handle, int preset, int bank);
298 | BOOL BASSMIDIDEF(BASS_MIDI_FontCompact)(HSOUNDFONT handle);
299 | BOOL BASSMIDIDEF(BASS_MIDI_FontPack)(HSOUNDFONT handle, const void *outfile, const void *encoder, DWORD flags);
300 | BOOL BASSMIDIDEF(BASS_MIDI_FontUnpack)(HSOUNDFONT handle, const void *outfile, DWORD flags);
301 | BOOL BASSMIDIDEF(BASS_MIDI_FontSetVolume)(HSOUNDFONT handle, float volume);
302 | float BASSMIDIDEF(BASS_MIDI_FontGetVolume)(HSOUNDFONT handle);
303 |
304 | DWORD BASSMIDIDEF(BASS_MIDI_ConvertEvents)(const BYTE *data, DWORD length, BASS_MIDI_EVENT *events, DWORD count, DWORD flags);
305 |
306 | BOOL BASSMIDIDEF(BASS_MIDI_InGetDeviceInfo)(DWORD device, BASS_MIDI_DEVICEINFO *info);
307 | BOOL BASSMIDIDEF(BASS_MIDI_InInit)(DWORD device, MIDIINPROC *proc, void *user);
308 | BOOL BASSMIDIDEF(BASS_MIDI_InFree)(DWORD device);
309 | BOOL BASSMIDIDEF(BASS_MIDI_InStart)(DWORD device);
310 | BOOL BASSMIDIDEF(BASS_MIDI_InStop)(DWORD device);
311 |
312 | #ifdef __cplusplus
313 | }
314 |
315 | static inline BOOL BASS_MIDI_StreamSetFonts(HSTREAM handle, const BASS_MIDI_FONTEX *fonts, DWORD count)
316 | {
317 | return BASS_MIDI_StreamSetFonts(handle, (const void*)fonts, count|BASS_MIDI_FONT_EX);
318 | }
319 |
320 | static inline DWORD BASS_MIDI_StreamGetFonts(HSTREAM handle, BASS_MIDI_FONTEX *fonts, DWORD count)
321 | {
322 | return BASS_MIDI_StreamGetFonts(handle, (void*)fonts, count|BASS_MIDI_FONT_EX);
323 | }
324 |
325 | #ifdef _WIN32
326 | static inline HSTREAM BASS_MIDI_StreamCreateFile(BOOL mem, const WCHAR *file, QWORD offset, QWORD length, DWORD flags, DWORD freq)
327 | {
328 | return BASS_MIDI_StreamCreateFile(mem, (const void*)file, offset, length, flags|BASS_UNICODE, freq);
329 | }
330 |
331 | static inline HSTREAM BASS_MIDI_StreamCreateURL(const WCHAR *url, DWORD offset, DWORD flags, DOWNLOADPROC *proc, void *user, DWORD freq)
332 | {
333 | return BASS_MIDI_StreamCreateURL((const char*)url, offset, flags|BASS_UNICODE, proc, user, freq);
334 | }
335 |
336 | static inline HSOUNDFONT BASS_MIDI_FontInit(const WCHAR *file, DWORD flags)
337 | {
338 | return BASS_MIDI_FontInit((const void*)file, flags|BASS_UNICODE);
339 | }
340 |
341 | static inline BOOL BASS_MIDI_FontPack(HSOUNDFONT handle, const WCHAR *outfile, const WCHAR *encoder, DWORD flags)
342 | {
343 | return BASS_MIDI_FontPack(handle, (const void*)outfile, (const void*)encoder, flags|BASS_UNICODE);
344 | }
345 |
346 | static inline BOOL BASS_MIDI_FontUnpack(HSOUNDFONT handle, const WCHAR *outfile, DWORD flags)
347 | {
348 | return BASS_MIDI_FontUnpack(handle, (const void*)outfile, flags|BASS_UNICODE);
349 | }
350 | #endif
351 | #endif
352 |
353 | #endif
354 |
--------------------------------------------------------------------------------
/extlib/bass/bassmidi.lib:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/extlib/bass/bassmidi.lib
--------------------------------------------------------------------------------
/extlib/bass/libatrac9.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/extlib/bass/libatrac9.dll
--------------------------------------------------------------------------------
/extlib/bass/libcelt-0061.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/extlib/bass/libcelt-0061.dll
--------------------------------------------------------------------------------
/extlib/bass/libcelt-0110.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/extlib/bass/libcelt-0110.dll
--------------------------------------------------------------------------------
/extlib/bass/libg719_decode.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/extlib/bass/libg719_decode.dll
--------------------------------------------------------------------------------
/extlib/bass/libg7221_decode.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/extlib/bass/libg7221_decode.dll
--------------------------------------------------------------------------------
/extlib/bass/libmpg123-0.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/extlib/bass/libmpg123-0.dll
--------------------------------------------------------------------------------
/extlib/bass/libogg.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/extlib/bass/libogg.dll
--------------------------------------------------------------------------------
/extlib/bass/libvorbis.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/extlib/bass/libvorbis.dll
--------------------------------------------------------------------------------
/extlib/bass/libvorbisfile.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/extlib/bass/libvorbisfile.dll
--------------------------------------------------------------------------------
/extlib/smpsplay-dll/SMPSPlay.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/extlib/smpsplay-dll/SMPSPlay.dll
--------------------------------------------------------------------------------
/extlib/smpsplay-dll/SMPSPlay.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 | #include
3 |
4 | #ifdef SMPSPlay_EXPORTS
5 | #define SMPSPlay_API __declspec(dllexport)
6 | #else
7 | #define SMPSPlay_API __declspec(dllimport)
8 | #endif
9 |
10 | #ifdef __cplusplus
11 | extern "C"
12 | {
13 | #endif
14 |
15 | #ifndef __SMPS_H__
16 | typedef void(*SMPS_CB_SIGNAL)(void);
17 | #endif
18 |
19 | SMPSPlay_API BOOL SMPS_InitializeDriver();
20 | SMPSPlay_API BOOL SMPS_DeInitializeDriver();
21 | SMPSPlay_API void SMPS_RegisterSongStoppedCallback(void(*callback)());
22 | SMPSPlay_API BOOL SMPS_LoadSong(short id);
23 | SMPSPlay_API BOOL SMPS_PlaySong();
24 | SMPSPlay_API BOOL SMPS_LoadAndPlaySong(short id);
25 | SMPSPlay_API BOOL SMPS_StopSong();
26 | SMPSPlay_API void SMPS_FadeOutSong();
27 | SMPSPlay_API void SMPS_FadeInSong();
28 | SMPSPlay_API BOOL SMPS_PauseSong();
29 | SMPSPlay_API BOOL SMPS_ResumeSong();
30 | SMPSPlay_API BOOL SMPS_SetSongTempo(double multiplier);
31 | SMPSPlay_API void SMPS_SetDefault1UpHandling(bool enable);
32 | SMPSPlay_API void SMPS_AddCustomSongs(const char *filename);
33 | SMPSPlay_API const char **SMPS_GetSongNames(unsigned int &count);
34 | SMPSPlay_API void SMPS_SetVolume(double volume);
35 | SMPSPlay_API void SMPS_SetWaveLogPath(const char *logfile);
36 | SMPSPlay_API void SMPS_RegisterSongLoopCallback(SMPS_CB_SIGNAL func);
37 | SMPSPlay_API void SMPS_EnableFMDrums(bool enable);
38 |
39 |
40 | #ifdef __cplusplus
41 | }
42 | #endif
--------------------------------------------------------------------------------
/extlib/smpsplay-dll/SMPSPlay.lib:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonicretro/skc-mod-loader/54e5b96140de4468f7b2c498f8aa31fcf8fede7e/extlib/smpsplay-dll/SMPSPlay.lib
--------------------------------------------------------------------------------
/extlib/smpsplay-dll/musicid.gen.h:
--------------------------------------------------------------------------------
1 | // This file was automatically generated by SMPSPlayBuildTool.
2 |
3 | enum MusicID {
4 | MusicID_S3Title,
5 | MusicID_AngelIsland1,
6 | MusicID_AngelIsland2,
7 | MusicID_Hydrocity1,
8 | MusicID_Hydrocity2,
9 | MusicID_MarbleGarden1,
10 | MusicID_MarbleGarden2,
11 | MusicID_CarnivalNight1,
12 | MusicID_CarnivalNight2,
13 | MusicID_FlyingBattery1,
14 | MusicID_FlyingBattery2,
15 | MusicID_IceCap1,
16 | MusicID_IceCap2,
17 | MusicID_LaunchBase1,
18 | MusicID_LaunchBase2,
19 | MusicID_MushroomHill1,
20 | MusicID_MushroomHill2,
21 | MusicID_Sandopolis1,
22 | MusicID_Sandopolis2,
23 | MusicID_LavaReef1,
24 | MusicID_LavaReef2,
25 | MusicID_SkySanctuary,
26 | MusicID_DeathEgg1,
27 | MusicID_DeathEgg2,
28 | MusicID_SKMidboss,
29 | MusicID_Boss,
30 | MusicID_Doomsday,
31 | MusicID_MagneticOrbs,
32 | MusicID_SpecialStage,
33 | MusicID_SlotMachine,
34 | MusicID_GumballMachine,
35 | MusicID_S3Knuckles,
36 | MusicID_AzureLake,
37 | MusicID_BalloonPark,
38 | MusicID_DesertPalace,
39 | MusicID_ChromeGadget,
40 | MusicID_EndlessMine,
41 | MusicID_GameOver,
42 | MusicID_Continue,
43 | MusicID_ActClear,
44 | MusicID_S31Up,
45 | MusicID_ChaosEmerald,
46 | MusicID_S3Invincibility,
47 | MusicID_CompetitionMenu,
48 | MusicID_S3Midboss,
49 | MusicID_LevelSelect,
50 | MusicID_FinalBoss,
51 | MusicID_Drowning,
52 | MusicID_S3AllClear,
53 | MusicID_S3Credits,
54 | MusicID_SKKnuckles,
55 | MusicID_SKTitle,
56 | MusicID_SK1Up,
57 | MusicID_SKInvincibility,
58 | MusicID_SKAllClear,
59 | MusicID_SKCredits,
60 | MusicID_S3CCredits,
61 | MusicID_S3Continue,
62 | MusicID_SKTitle0525,
63 | MusicID_SKAllClear0525,
64 | MusicID_SKCredits0525,
65 | MusicID_GreenGrove1,
66 | MusicID_GreenGrove2,
67 | MusicID_RustyRuin1,
68 | MusicID_RustyRuin2,
69 | MusicID_VolcanoValley2,
70 | MusicID_VolcanoValley1,
71 | MusicID_SpringStadium1,
72 | MusicID_SpringStadium2,
73 | MusicID_DiamondDust1,
74 | MusicID_DiamondDust2,
75 | MusicID_GeneGadget1,
76 | MusicID_GeneGadget2,
77 | MusicID_PanicPuppet2,
78 | MusicID_FinalFight,
79 | MusicID_S3DEnding,
80 | MusicID_S3DSpecialStage,
81 | MusicID_PanicPuppet1,
82 | MusicID_S3DBoss2,
83 | MusicID_S3DBoss1,
84 | MusicID_S3DIntro,
85 | MusicID_S3DCredits,
86 | MusicID_S3DInvincibility,
87 | MusicID_S3DMenu,
88 | MusicID_S4E1Boss,
89 | MusicID_GreenHill,
90 | MusicID_Labyrinth,
91 | MusicID_Marble,
92 | MusicID_StarLight,
93 | MusicID_SpringYard,
94 | MusicID_ScrapBrain,
95 | MusicID_S1Invincibility,
96 | MusicID_S11Up,
97 | MusicID_S1SpecialStage,
98 | MusicID_S1Title,
99 | MusicID_S1Ending,
100 | MusicID_S1Boss,
101 | MusicID_FinalZone,
102 | MusicID_S1ActClear,
103 | MusicID_S1GameOver,
104 | MusicID_S1Continue,
105 | MusicID_S1Credits,
106 | MusicID_S1Drowning,
107 | MusicID_S1ChaosEmerald,
108 | MusicID_CasinoNight2P,
109 | MusicID_EmeraldHill,
110 | MusicID_Metropolis,
111 | MusicID_CasinoNight,
112 | MusicID_MysticCave,
113 | MusicID_MysticCave2P,
114 | MusicID_AquaticRuin,
115 | MusicID_S2DeathEgg,
116 | MusicID_S2SpecialStage,
117 | MusicID_S2Options,
118 | MusicID_S2Ending,
119 | MusicID_S2FinalBoss,
120 | MusicID_ChemicalPlant,
121 | MusicID_S2Boss,
122 | MusicID_SkyChase,
123 | MusicID_OilOcean,
124 | MusicID_WingFortress,
125 | MusicID_EmeraldHill2P,
126 | MusicID_S22PResults,
127 | MusicID_S2SuperSonic,
128 | MusicID_HillTop,
129 | MusicID_S2Title,
130 | MusicID_S2Invincibility,
131 | MusicID_S2HiddenPalace,
132 | MusicID_S2Credits,
133 | MusicID_CasinoNight2PBeta,
134 | MusicID_EmeraldHillBeta,
135 | MusicID_MetropolisBeta,
136 | MusicID_CasinoNightBeta,
137 | MusicID_MysticCaveBeta,
138 | MusicID_MysticCave2PBeta,
139 | MusicID_AquaticRuinBeta,
140 | MusicID_S2DeathEggBeta,
141 | MusicID_S2SpecialStageBeta,
142 | MusicID_S2OptionsBeta,
143 | MusicID_S2FinalBossBeta,
144 | MusicID_ChemicalPlantBeta,
145 | MusicID_S2BossBeta,
146 | MusicID_SkyChaseBeta,
147 | MusicID_OilOceanBeta,
148 | MusicID_WingFortressBeta,
149 | MusicID_EmeraldHill2PBeta,
150 | MusicID_S22PResultsBeta,
151 | MusicID_S2SuperSonicBeta,
152 | MusicID_HillTopBeta,
153 | MusicID_S3DSpecialStageBeta,
154 | MusicID_ProtoAngelIsland1,
155 | MusicID_ProtoAngelIsland2,
156 | MusicID_ProtoHydrocity1,
157 | MusicID_ProtoHydrocity2,
158 | MusicID_ProtoCarnivalNight1,
159 | MusicID_ProtoCarnivalNight2,
160 | MusicID_ProtoFlyingBattery1,
161 | MusicID_ProtoFlyingBattery2,
162 | MusicID_ProtoIceCap1,
163 | MusicID_ProtoIceCap2,
164 | MusicID_ProtoLaunchBase1,
165 | MusicID_ProtoLaunchBase2,
166 | MusicID_ProtoMushroomHill1,
167 | MusicID_ProtoMushroomHill2,
168 | MusicID_ProtoLavaReef1,
169 | MusicID_ProtoLavaReef2,
170 | MusicID_ProtoSkySanctuary,
171 | MusicID_ProtoDoomsday,
172 | MusicID_ProtoSpecialStage,
173 | MusicID_ProtoKnuckles,
174 | MusicID_ProtoBalloonPark,
175 | MusicID_ProtoDesertPalace,
176 | MusicID_ProtoChromeGadget,
177 | MusicID_ProtoContinue,
178 | MusicID_ProtoActClear,
179 | MusicID_ProtoCompetitionMenu,
180 | MusicID_ProtoLevelSelect,
181 | MusicID_ProtoCredits,
182 | MusicID_ProtoUnused,
183 | MusicID_CarnivalNight1PC,
184 | MusicID_CarnivalNight2PC,
185 | MusicID_IceCap1PC,
186 | MusicID_IceCap2PC,
187 | MusicID_LaunchBase1PC,
188 | MusicID_LaunchBase2PC,
189 | MusicID_KnucklesPC,
190 | MusicID_CompetitionMenuPC,
191 | MusicID_UnusedPC,
192 | MusicID_CreditsPC,
193 | MusicID_S3InvincibilityPC,
194 | SongCount
195 | };
196 |
--------------------------------------------------------------------------------
/mods/MIDIMusic/Music/Music.ini:
--------------------------------------------------------------------------------
1 | [All]
2 | TitleScreenTrack=MIDI
3 | AngelIsland1Track=MIDI
4 | AngelIsland2Track=MIDI
5 | Hydrocity1Track=MIDI
6 | Hydrocity2Track=MIDI
7 | MarbleGarden1Track=MIDI
8 | MarbleGarden2Track=MIDI
9 | CarnivalNight1Track=MIDI
10 | CarnivalNight2Track=MIDI
11 | FlyingBattery1Track=MIDI
12 | FlyingBattery2Track=MIDI
13 | IceCap1Track=MIDI
14 | IceCap2Track=MIDI
15 | LaunchBase1Track=MIDI
16 | LaunchBase2Track=MIDI
17 | MushroomHill1Track=MIDI
18 | MushroomHill2Track=MIDI
19 | Sandopolis1Track=MIDI
20 | Sandopolis2Track=MIDI
21 | LavaReef1Track=MIDI
22 | LavaReef2Track=MIDI
23 | SkySanctuaryTrack=MIDI
24 | DeathEgg1Track=MIDI
25 | DeathEgg2Track=MIDI
26 | MidbossTrack=MIDI
27 | BossTrack=MIDI
28 | DoomsdayTrack=MIDI
29 | MagneticOrbsTrack=MIDI
30 | SpecialStageTrack=MIDI
31 | SlotMachineTrack=MIDI
32 | GumballMachineTrack=MIDI
33 | KnucklesTrack=MIDI
34 | AzureLakeTrack=MIDI
35 | BalloonParkTrack=MIDI
36 | DesertPalaceTrack=MIDI
37 | ChromeGadgetTrack=MIDI
38 | EndlessMineTrack=MIDI
39 | GameOverTrack=MIDI
40 | ContinueTrack=MIDI
41 | ActClearTrack=MIDI
42 | OneUpTrack=MIDI
43 | ChaosEmeraldTrack=MIDI
44 | InvincibilityTrack=MIDI
45 | CompetitionMenuTrack=MIDI
46 | UnusedTrack=MIDI
47 | LevelSelectTrack=MIDI
48 | FinalBossTrack=MIDI
49 | DrowningTrack=MIDI
50 | AllClearTrack=MIDI
51 | CreditsTrack=MIDI
52 | HiddenPalaceTrack=MIDI
53 | SuperSonicTrack=MIDI
54 | EndingTrack=MIDI
55 | DataSelectTrack=MIDI
56 | SpecialStageResultTrack=MIDI
57 | BlueSphereResultTrack=MIDI
58 | BlueSphereTitleTrack=MIDI
59 | BlueSphereDifficultyTrack=MIDI
60 | TimeAttackRecordsTrack=MIDI
61 | KnucklesBossTrack=MIDI
62 |
--------------------------------------------------------------------------------
/mods/MIDIMusic/mod.ini:
--------------------------------------------------------------------------------
1 | Name=MIDI Music
2 | Description=Sets all the game's music to the original MIDI files.
3 | Author=MainMemory
4 |
--------------------------------------------------------------------------------
/mods/SMPS_ByCharacterThemes/Music/Music.ini:
--------------------------------------------------------------------------------
1 | [S3K]
2 | MidbossTrack=ByCharacter
3 | KnucklesTrack=ByCharacter
4 | ContinueTrack=ByCharacter
5 | OneUpTrack=ByCharacter
6 | InvincibilityTrack=ByCharacter
7 | AllClearTrack=ByCharacter
8 | CreditsTrack=ByCharacter
9 |
--------------------------------------------------------------------------------
/mods/SMPS_ByCharacterThemes/mod.ini:
--------------------------------------------------------------------------------
1 | Name=[SMPS] Character-Dependent Themes
2 | Description=Plays S3 or S&K music based on which character you're playing as.
3 | Author=MainMemory
4 |
--------------------------------------------------------------------------------
/mods/SMPS_ByZoneThemes/Music/Music.ini:
--------------------------------------------------------------------------------
1 | [S3K]
2 | MidbossTrack=ByZone
3 | KnucklesTrack=ByZone
4 | ContinueTrack=ByZone
5 | OneUpTrack=ByZone
6 | InvincibilityTrack=ByZone
7 |
--------------------------------------------------------------------------------
/mods/SMPS_ByZoneThemes/mod.ini:
--------------------------------------------------------------------------------
1 | Name=[SMPS] Zone-Dependent Themes
2 | Description=Plays S3 or S&K music based on which Zone you're playing.
3 | Author=MainMemory
4 |
--------------------------------------------------------------------------------
/mods/SMPS_PCThemes/Music/Music.ini:
--------------------------------------------------------------------------------
1 | [All]
2 | CarnivalNight1Track=CarnivalNight1PC
3 | CarnivalNight2Track=CarnivalNight2PC
4 | IceCap1Track=IceCap1PC
5 | IceCap2Track=IceCap2PC
6 | LaunchBase1Track=LaunchBase1PC
7 | LaunchBase2Track=LaunchBase2PC
8 | InvincibilityTrack=S3InvincibilityPC
9 | CompetitionMenuTrack=CompetitionMenuPC
10 | [S3]
11 | KnucklesTrack=KnucklesPC
12 | CreditsTrack=CreditsPC
13 |
--------------------------------------------------------------------------------
/mods/SMPS_PCThemes/mod.ini:
--------------------------------------------------------------------------------
1 | Name=[SMPS] PC Themes
2 | Description=Plays SMPS conversions of the PC-exclusive music.
3 | Author=MainMemory
4 |
--------------------------------------------------------------------------------
/mods/SMPS_ProtoThemes/Music/Music.ini:
--------------------------------------------------------------------------------
1 | [All]
2 | AngelIsland1Track=ProtoAngelIsland1
3 | AngelIsland2Track=ProtoAngelIsland2
4 | Hydrocity1Track=ProtoHydrocity1
5 | Hydrocity2Track=ProtoHydrocity2
6 | CarnivalNight1Track=ProtoCarnivalNight1
7 | CarnivalNight2Track=ProtoCarnivalNight2
8 | FlyingBattery1Track=ProtoFlyingBattery1
9 | FlyingBattery2Track=ProtoFlyingBattery2
10 | IceCap1Track=ProtoIceCap1
11 | IceCap2Track=ProtoIceCap2
12 | LaunchBase1Track=ProtoLaunchBase1
13 | LaunchBase2Track=ProtoLaunchBase2
14 | MushroomHill1Track=ProtoMushroomHill1
15 | MushroomHill2Track=ProtoMushroomHill2
16 | LavaReef1Track=ProtoLavaReef1
17 | LavaReef2Track=ProtoLavaReef2
18 | SkySanctuaryTrack=ProtoSkySanctuary
19 | DoomsdayTrack=ProtoDoomsday
20 | MagneticOrbsTrack=SlotMachine
21 | SlotMachineTrack=GumballMachine
22 | GumballMachineTrack=SpecialStage
23 | KnucklesTrack=ProtoKnuckles
24 | BalloonParkTrack=ProtoBalloonPark
25 | DesertPalaceTrack=ProtoDesertPalace
26 | ChromeGadgetTrack=ProtoChromeGadget
27 | ContinueTrack=ProtoContinue
28 | ActClearTrack=ProtoActClear
29 | CompetitionMenuTrack=ProtoCompetitionMenu
30 | UnusedTrack=ProtoUnused
31 | LevelSelectTrack=ProtoLevelSelect
32 | CreditsTrack=SKCredits0525
33 | [S3K]
34 | TitleScreenTrack=SKTitle0525
35 | AllClearTrack=SKAllClear0525
36 | [S3]
37 | MidbossTrack=SKMidboss
38 | CreditsTrack=ProtoCredits
39 | [S&K]
40 | TitleScreenTrack=SKTitle0525
41 | AllClearTrack=SKAllClear0525
42 |
--------------------------------------------------------------------------------
/mods/SMPS_ProtoThemes/mod.ini:
--------------------------------------------------------------------------------
1 | Name=[SMPS] Prototype Themes
2 | Description=Plays music from prototype versions of Sonic 3 and Sonic & Knuckles.
3 | Author=MainMemory
4 |
--------------------------------------------------------------------------------
/mods/SMPS_S3Themes/Music/Music.ini:
--------------------------------------------------------------------------------
1 | [All]
2 | TitleScreenTrack=S3Title
3 | MidbossTrack=S3Midboss
4 | KnucklesTrack=S3Knuckles
5 | ContinueTrack=S3Continue
6 | OneUpTrack=S31Up
7 | InvincibilityTrack=S3Invincibility
8 | AllClearTrack=S3AllClear
9 | CreditsTrack=S3Credits
10 |
--------------------------------------------------------------------------------
/mods/SMPS_S3Themes/mod.ini:
--------------------------------------------------------------------------------
1 | Name=[SMPS] Sonic 3 Themes
2 | Description=Restores the Sonic 3 music that was replaced in Sonic & Knuckles.
3 | Author=MainMemory
4 |
--------------------------------------------------------------------------------