├── .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 | --------------------------------------------------------------------------------