diff --git a/.gitignore b/.gitignore
index cdf3f4b..3c3b682 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,7 +1,6 @@
.vs/
-*.sln
-*.csproj
**/bin/*
**/obj/*
-*.dll
-Common/
\ No newline at end of file
+_*/
+Common/*
+!Common/mscorlib.dll
\ No newline at end of file
diff --git a/BetterGiveUp/Assembly-CSharp.BetterGiveUp.mm.csproj b/BetterGiveUp/Assembly-CSharp.BetterGiveUp.mm.csproj
new file mode 100644
index 0000000..9ff06d0
--- /dev/null
+++ b/BetterGiveUp/Assembly-CSharp.BetterGiveUp.mm.csproj
@@ -0,0 +1,22 @@
+
+
+ net35
+ Assembly-CSharp.BetterGiveUp.mm
+ 7EVENDAYS⇔HOLIDAYS
+ Forfeit and restart in mu3
+ 1.6.0
+ true
+ latest
+ x64
+
+
+
+ ..\Common\mscorlib.dll
+ ..\Common\UnityEngine.dll
+
+
+
+
+
+
+
diff --git a/Common/mscorlib.dll b/Common/mscorlib.dll
new file mode 100644
index 0000000..8b2653b
Binary files /dev/null and b/Common/mscorlib.dll differ
diff --git a/ExportChartData/Assembly-CSharp.ExportChartData.mm.csproj b/ExportChartData/Assembly-CSharp.ExportChartData.mm.csproj
new file mode 100644
index 0000000..0da3fae
--- /dev/null
+++ b/ExportChartData/Assembly-CSharp.ExportChartData.mm.csproj
@@ -0,0 +1,23 @@
+
+
+ net35
+ Assembly-CSharp.ExportChartData.mm
+ 7EVENDAYS⇔HOLIDAYS
+ Export mu3 chart data
+ 1.3.0
+ true
+ latest
+ x64
+
+
+
+ ..\Common\mscorlib.dll
+ ..\Common\UnityEngine.dll
+
+
+
+
+
+
+
+
diff --git a/InfiniteGP/Assembly-CSharp.InfiniteGP.mm.csproj b/InfiniteGP/Assembly-CSharp.InfiniteGP.mm.csproj
new file mode 100644
index 0000000..cecb800
--- /dev/null
+++ b/InfiniteGP/Assembly-CSharp.InfiniteGP.mm.csproj
@@ -0,0 +1,23 @@
+
+
+ net35
+ Assembly-CSharp.InfiniteGP.mm
+ 7EVENDAYS⇔HOLIDAYS
+ Infinite GP in mu3
+ 1.6.0
+ true
+ latest
+ x64
+
+
+
+ ..\Common\mscorlib.dll
+ ..\Common\UnityEngine.dll
+ ..\Common\UnityEngine.UI.dll
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/LockSelectionTime/Assembly-CSharp.LockSelectionTime.mm.csproj b/LockSelectionTime/Assembly-CSharp.LockSelectionTime.mm.csproj
new file mode 100644
index 0000000..0427a08
--- /dev/null
+++ b/LockSelectionTime/Assembly-CSharp.LockSelectionTime.mm.csproj
@@ -0,0 +1,23 @@
+
+
+ net35
+ Assembly-CSharp.LockSelectionTime.mm
+ 7EVENDAYS⇔HOLIDAYS
+ Lock selection time in mu3
+ 1.5.0
+ true
+ latest
+ x64
+
+
+
+ ..\Common\mscorlib.dll
+ ..\Common\UnityEngine.dll
+ ..\Common\UnityEngine.UI.dll
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/MiscMods.sln b/MiscMods.sln
new file mode 100644
index 0000000..656c434
--- /dev/null
+++ b/MiscMods.sln
@@ -0,0 +1,73 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.9.34728.123
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Assembly-CSharp.BetterGiveUp.mm", "BetterGiveUp\Assembly-CSharp.BetterGiveUp.mm.csproj", "{003AD3C6-07CA-4824-B4BD-4BEF6F3D8997}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Assembly-CSharp.NaiveRating.mm", "NaiveRating\Assembly-CSharp.NaiveRating.mm.csproj", "{1FEA698E-DF5E-46CF-8023-F2B2F57885C5}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Assembly-CSharp.ExportChartData.mm", "ExportChartData\Assembly-CSharp.ExportChartData.mm.csproj", "{8BFC37B1-C6C8-492A-B8DC-99BD1F1B9576}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Assembly-CSharp.SkipNotice.mm", "SkipNotice\Assembly-CSharp.SkipNotice.mm.csproj", "{A1F32CB9-56C2-458A-B369-C61BD3A6AFBB}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Assembly-CSharp.SkipPreMusicRitual.mm", "SkipPreMusicRitual\Assembly-CSharp.SkipPreMusicRitual.mm.csproj", "{BB9CB905-9989-466C-9A91-D2F323005237}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Assembly-CSharp.InfiniteGP.mm", "InfiniteGP\Assembly-CSharp.InfiniteGP.mm.csproj", "{990DCB96-7A47-45B9-B7CB-A6B2A1B6864A}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Assembly-CSharp.LockSelectionTime.mm", "LockSelectionTime\Assembly-CSharp.LockSelectionTime.mm.csproj", "{66DE85AD-58AD-467C-B1C0-6B98BB27265D}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Assembly-CSharp.SkipLoginReward.mm", "SkipLoginReward\Assembly-CSharp.SkipLoginReward.mm.csproj", "{6E078B7E-7965-4CFF-9590-5C27A009BA7A}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Assembly-CSharp.Pause.mm", "Pause\Assembly-CSharp.Pause.mm.csproj", "{627B3AA0-25E2-4C3E-A211-66BAB0E997E2}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|x64 = Debug|x64
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {003AD3C6-07CA-4824-B4BD-4BEF6F3D8997}.Debug|x64.ActiveCfg = Debug|x64
+ {003AD3C6-07CA-4824-B4BD-4BEF6F3D8997}.Debug|x64.Build.0 = Debug|x64
+ {003AD3C6-07CA-4824-B4BD-4BEF6F3D8997}.Release|x64.ActiveCfg = Release|x64
+ {003AD3C6-07CA-4824-B4BD-4BEF6F3D8997}.Release|x64.Build.0 = Release|x64
+ {1FEA698E-DF5E-46CF-8023-F2B2F57885C5}.Debug|x64.ActiveCfg = Debug|x64
+ {1FEA698E-DF5E-46CF-8023-F2B2F57885C5}.Debug|x64.Build.0 = Debug|x64
+ {1FEA698E-DF5E-46CF-8023-F2B2F57885C5}.Release|x64.ActiveCfg = Release|x64
+ {1FEA698E-DF5E-46CF-8023-F2B2F57885C5}.Release|x64.Build.0 = Release|x64
+ {8BFC37B1-C6C8-492A-B8DC-99BD1F1B9576}.Debug|x64.ActiveCfg = Debug|x64
+ {8BFC37B1-C6C8-492A-B8DC-99BD1F1B9576}.Debug|x64.Build.0 = Debug|x64
+ {8BFC37B1-C6C8-492A-B8DC-99BD1F1B9576}.Release|x64.ActiveCfg = Release|x64
+ {8BFC37B1-C6C8-492A-B8DC-99BD1F1B9576}.Release|x64.Build.0 = Release|x64
+ {A1F32CB9-56C2-458A-B369-C61BD3A6AFBB}.Debug|x64.ActiveCfg = Debug|x64
+ {A1F32CB9-56C2-458A-B369-C61BD3A6AFBB}.Debug|x64.Build.0 = Debug|x64
+ {A1F32CB9-56C2-458A-B369-C61BD3A6AFBB}.Release|x64.ActiveCfg = Release|x64
+ {A1F32CB9-56C2-458A-B369-C61BD3A6AFBB}.Release|x64.Build.0 = Release|x64
+ {BB9CB905-9989-466C-9A91-D2F323005237}.Debug|x64.ActiveCfg = Debug|x64
+ {BB9CB905-9989-466C-9A91-D2F323005237}.Debug|x64.Build.0 = Debug|x64
+ {BB9CB905-9989-466C-9A91-D2F323005237}.Release|x64.ActiveCfg = Release|x64
+ {BB9CB905-9989-466C-9A91-D2F323005237}.Release|x64.Build.0 = Release|x64
+ {990DCB96-7A47-45B9-B7CB-A6B2A1B6864A}.Debug|x64.ActiveCfg = Debug|x64
+ {990DCB96-7A47-45B9-B7CB-A6B2A1B6864A}.Debug|x64.Build.0 = Debug|x64
+ {990DCB96-7A47-45B9-B7CB-A6B2A1B6864A}.Release|x64.ActiveCfg = Release|x64
+ {990DCB96-7A47-45B9-B7CB-A6B2A1B6864A}.Release|x64.Build.0 = Release|x64
+ {66DE85AD-58AD-467C-B1C0-6B98BB27265D}.Debug|x64.ActiveCfg = Debug|x64
+ {66DE85AD-58AD-467C-B1C0-6B98BB27265D}.Debug|x64.Build.0 = Debug|x64
+ {66DE85AD-58AD-467C-B1C0-6B98BB27265D}.Release|x64.ActiveCfg = Release|x64
+ {66DE85AD-58AD-467C-B1C0-6B98BB27265D}.Release|x64.Build.0 = Release|x64
+ {6E078B7E-7965-4CFF-9590-5C27A009BA7A}.Debug|x64.ActiveCfg = Debug|x64
+ {6E078B7E-7965-4CFF-9590-5C27A009BA7A}.Debug|x64.Build.0 = Debug|x64
+ {6E078B7E-7965-4CFF-9590-5C27A009BA7A}.Release|x64.ActiveCfg = Release|x64
+ {6E078B7E-7965-4CFF-9590-5C27A009BA7A}.Release|x64.Build.0 = Release|x64
+ {627B3AA0-25E2-4C3E-A211-66BAB0E997E2}.Debug|x64.ActiveCfg = Debug|x64
+ {627B3AA0-25E2-4C3E-A211-66BAB0E997E2}.Debug|x64.Build.0 = Debug|x64
+ {627B3AA0-25E2-4C3E-A211-66BAB0E997E2}.Release|x64.ActiveCfg = Release|x64
+ {627B3AA0-25E2-4C3E-A211-66BAB0E997E2}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {D9317002-F66D-4CDE-8FF5-FF2A0D8DC021}
+ EndGlobalSection
+EndGlobal
diff --git a/NaiveRating/Assembly-CSharp.NaiveRating.mm.csproj b/NaiveRating/Assembly-CSharp.NaiveRating.mm.csproj
new file mode 100644
index 0000000..05cb76a
--- /dev/null
+++ b/NaiveRating/Assembly-CSharp.NaiveRating.mm.csproj
@@ -0,0 +1,24 @@
+
+
+ net35
+ Assembly-CSharp.NaiveRating.mm
+ 7EVENDAYS⇔HOLIDAYS
+ Better rating for mu3
+ 1.5.0
+ true
+ latest
+ x64
+
+
+
+ ..\Common\mscorlib.dll
+ ..\Common\UnityEngine.dll
+ ..\Common\UnityEngine.UI.dll
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Pause/Assembly-CSharp.Pause.mm.csproj b/Pause/Assembly-CSharp.Pause.mm.csproj
new file mode 100644
index 0000000..0ded9df
--- /dev/null
+++ b/Pause/Assembly-CSharp.Pause.mm.csproj
@@ -0,0 +1,24 @@
+
+
+ net35
+ Assembly-CSharp.Pause.mm
+ 7EVENDAYS⇔HOLIDAYS
+ Pause in mu3
+ 1.6.0
+ true
+ latest
+ x64
+
+
+
+ ..\Common\mscorlib.dll
+ ..\Common\UnityEngine.dll
+ ..\Common\UnityEngine.UI.dll
+ ..\Common\Assembly-CSharp-firstpass.dll
+
+
+
+
+
+
+
diff --git a/README.md b/README.md
index 09d6b68..13475dc 100644
--- a/README.md
+++ b/README.md
@@ -1,50 +1,10 @@
## µ3 mods
-Miscellaneous mods for µ3/SDDT; mainly for my personal use, though suggestions/PRs are welcome. Each mod is a separate independent DLL.
+Miscellaneous mods for µ3/SDDT. Suggestions/PRs are welcome.
-### BetterGiveUp
+Visit [the wiki](https://gitea.tendokyu.moe/akanyan/mu3-mods/wiki) for more information.
-Enables the following buttons in music play:
-
-* Red menu: instant return to song select
-* Yellow menu: instant restart
-
-To avoid misclicks, you have to hold the button down for 1 second.
-
-Based on GiveUp from the older modpack, but Better.
-
-### ExportChartData
-
-Exports some useful chart data into a dollar-separated file (charts.csv) when the game launches.
-
-### InfiniteGP
-
-Patches out GP and credits.
-
-### LockSelectionTime
-
-Disables *all* timers. A replacement for LockSelectionTime from the older modpack.
-
-### NaiveRating
-
-Replaces the in-game rating algorithm (OldBest30+NewBest15+Recent10) with Best45. Client-side and purely cosmetic.
-
-### Pause
-
-Enables pausing music play on FN2 (service button). Has an internal 5s cooldown.
-
-### SkipLoginReward ⚠️
-
-Skips login bonuses and event rewards. If you care about those things, don't use this one.
-
-### SkipNotice
-
-Skips the safety warning screen and event notices.
-
-### SkipPreMusicRitual
-
-Skips the battle intro, card flex, "are you ready? let's shoot!", etc.
-
-## Installation
-
-Refer to the guide for [Inohara](https://gitea.tendokyu.moe/akanyan/inohara#installation). If you're using either BepInEx method, you should put the desired DLLs in `\BepInEx\monomod`.
\ No newline at end of file
+### Supported versions
+- 1.39
+- 1.40
+- 1.45
\ No newline at end of file
diff --git a/SkipLoginReward/Assembly-CSharp.SkipLoginReward.mm.csproj b/SkipLoginReward/Assembly-CSharp.SkipLoginReward.mm.csproj
new file mode 100644
index 0000000..3ee54a9
--- /dev/null
+++ b/SkipLoginReward/Assembly-CSharp.SkipLoginReward.mm.csproj
@@ -0,0 +1,22 @@
+
+
+ net35
+ Assembly-CSharp.SkipLoginReward.mm
+ 7EVENDAYS⇔HOLIDAYS
+ Skip bullshit in mu3 that some individuals may consider useful
+ 1.5.1
+ true
+ latest
+ x64
+
+
+
+ ..\Common\mscorlib.dll
+ ..\Common\UnityEngine.dll
+
+
+
+
+
+
+
diff --git a/SkipNotice/Assembly-CSharp.SkipNotice.mm.csproj b/SkipNotice/Assembly-CSharp.SkipNotice.mm.csproj
new file mode 100644
index 0000000..2281d91
--- /dev/null
+++ b/SkipNotice/Assembly-CSharp.SkipNotice.mm.csproj
@@ -0,0 +1,22 @@
+
+
+ net35
+ Assembly-CSharp.SkipNotice.mm
+ 7EVENDAYS⇔HOLIDAYS
+ Skip bullshit in mu3
+ 1.5.1
+ true
+ latest
+ x64
+
+
+
+ ..\Common\mscorlib.dll
+ ..\Common\UnityEngine.dll
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SkipPreMusicRitual/Assembly-CSharp.SkipPreMusicRitual.mm.csproj b/SkipPreMusicRitual/Assembly-CSharp.SkipPreMusicRitual.mm.csproj
new file mode 100644
index 0000000..e788387
--- /dev/null
+++ b/SkipPreMusicRitual/Assembly-CSharp.SkipPreMusicRitual.mm.csproj
@@ -0,0 +1,22 @@
+
+
+ net35
+ Assembly-CSharp.SkipPreMusicRitual.mm
+ 7EVENDAYS⇔HOLIDAYS
+ Skip more bullshit in mu3
+ 1.3.0
+ true
+ latest
+ x64
+
+
+
+ ..\Common\mscorlib.dll
+ ..\Common\UnityEngine.dll
+
+
+
+
+
+
+