├── .gitattributes ├── .gitignore ├── .gitmodules ├── FallGuysSharp ├── FallGuysDumper │ ├── App.config │ ├── FallGuysDumper.csproj │ ├── Program.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ └── lib │ │ └── mscorlib.dll ├── FallGuysMods │ ├── Common │ │ ├── ModBase.cs │ │ └── ModManager.cs │ ├── FallGuysMods.csproj │ ├── Init.cs │ ├── Mods │ │ ├── AvoidDataCheck.cs │ │ ├── FreezeMe.cs │ │ ├── LevelHelper.cs │ │ ├── SceneDebugger.cs │ │ └── WinRace.cs │ └── Properties │ │ └── AssemblyInfo.cs ├── FallGuysSharp.sln └── FallGuysSharp │ ├── App.config │ ├── FallGuysSharp.csproj │ ├── Managed │ ├── System.Core.dll │ ├── System.dll │ └── mscorlib.dll │ ├── Program.cs │ ├── Properties │ └── AssemblyInfo.cs │ ├── mono │ └── mono-2.0-bdwgc.dll │ └── packages.config ├── LICENSE ├── README.md └── demo ├── freezepos.gif ├── levelhelper.gif └── winrace.gif /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.rsuser 8 | *.suo 9 | *.user 10 | *.userosscache 11 | *.sln.docstates 12 | 13 | # User-specific files (MonoDevelop/Xamarin Studio) 14 | *.userprefs 15 | 16 | # Mono auto generated files 17 | mono_crash.* 18 | 19 | # Build results 20 | [Dd]ebug/ 21 | [Dd]ebugPublic/ 22 | [Rr]elease/ 23 | [Rr]eleases/ 24 | x64/ 25 | x86/ 26 | [Aa][Rr][Mm]/ 27 | [Aa][Rr][Mm]64/ 28 | bld/ 29 | [Bb]in/ 30 | [Oo]bj/ 31 | [Ll]og/ 32 | [Ll]ogs/ 33 | 34 | # Visual Studio 2015/2017 cache/options directory 35 | .vs/ 36 | # Uncomment if you have tasks that create the project's static files in wwwroot 37 | #wwwroot/ 38 | 39 | # Visual Studio 2017 auto generated files 40 | Generated\ Files/ 41 | 42 | # MSTest test Results 43 | [Tt]est[Rr]esult*/ 44 | [Bb]uild[Ll]og.* 45 | 46 | # NUnit 47 | *.VisualState.xml 48 | TestResult.xml 49 | nunit-*.xml 50 | 51 | # Build Results of an ATL Project 52 | [Dd]ebugPS/ 53 | [Rr]eleasePS/ 54 | dlldata.c 55 | 56 | # Benchmark Results 57 | BenchmarkDotNet.Artifacts/ 58 | 59 | # .NET Core 60 | project.lock.json 61 | project.fragment.lock.json 62 | artifacts/ 63 | 64 | # StyleCop 65 | StyleCopReport.xml 66 | 67 | # Files built by Visual Studio 68 | *_i.c 69 | *_p.c 70 | *_h.h 71 | *.ilk 72 | *.meta 73 | *.obj 74 | *.iobj 75 | *.pch 76 | *.pdb 77 | *.ipdb 78 | *.pgc 79 | *.pgd 80 | *.rsp 81 | *.sbr 82 | *.tlb 83 | *.tli 84 | *.tlh 85 | *.tmp 86 | *.tmp_proj 87 | *_wpftmp.csproj 88 | *.log 89 | *.vspscc 90 | *.vssscc 91 | .builds 92 | *.pidb 93 | *.svclog 94 | *.scc 95 | 96 | # Chutzpah Test files 97 | _Chutzpah* 98 | 99 | # Visual C++ cache files 100 | ipch/ 101 | *.aps 102 | *.ncb 103 | *.opendb 104 | *.opensdf 105 | *.sdf 106 | *.cachefile 107 | *.VC.db 108 | *.VC.VC.opendb 109 | 110 | # Visual Studio profiler 111 | *.psess 112 | *.vsp 113 | *.vspx 114 | *.sap 115 | 116 | # Visual Studio Trace Files 117 | *.e2e 118 | 119 | # TFS 2012 Local Workspace 120 | $tf/ 121 | 122 | # Guidance Automation Toolkit 123 | *.gpState 124 | 125 | # ReSharper is a .NET coding add-in 126 | _ReSharper*/ 127 | *.[Rr]e[Ss]harper 128 | *.DotSettings.user 129 | 130 | # JustCode is a .NET coding add-in 131 | .JustCode 132 | 133 | # TeamCity is a build add-in 134 | _TeamCity* 135 | 136 | # DotCover is a Code Coverage Tool 137 | *.dotCover 138 | 139 | # AxoCover is a Code Coverage Tool 140 | .axoCover/* 141 | !.axoCover/settings.json 142 | 143 | # Visual Studio code coverage results 144 | *.coverage 145 | *.coveragexml 146 | 147 | # NCrunch 148 | _NCrunch_* 149 | .*crunch*.local.xml 150 | nCrunchTemp_* 151 | 152 | # MightyMoose 153 | *.mm.* 154 | AutoTest.Net/ 155 | 156 | # Web workbench (sass) 157 | .sass-cache/ 158 | 159 | # Installshield output folder 160 | [Ee]xpress/ 161 | 162 | # DocProject is a documentation generator add-in 163 | DocProject/buildhelp/ 164 | DocProject/Help/*.HxT 165 | DocProject/Help/*.HxC 166 | DocProject/Help/*.hhc 167 | DocProject/Help/*.hhk 168 | DocProject/Help/*.hhp 169 | DocProject/Help/Html2 170 | DocProject/Help/html 171 | 172 | # Click-Once directory 173 | publish/ 174 | 175 | # Publish Web Output 176 | *.[Pp]ublish.xml 177 | *.azurePubxml 178 | # Note: Comment the next line if you want to checkin your web deploy settings, 179 | # but database connection strings (with potential passwords) will be unencrypted 180 | *.pubxml 181 | *.publishproj 182 | 183 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 184 | # checkin your Azure Web App publish settings, but sensitive information contained 185 | # in these scripts will be unencrypted 186 | PublishScripts/ 187 | 188 | # NuGet Packages 189 | *.nupkg 190 | # NuGet Symbol Packages 191 | *.snupkg 192 | # The packages folder can be ignored because of Package Restore 193 | **/[Pp]ackages/* 194 | # except build/, which is used as an MSBuild target. 195 | !**/[Pp]ackages/build/ 196 | # Uncomment if necessary however generally it will be regenerated when needed 197 | #!**/[Pp]ackages/repositories.config 198 | # NuGet v3's project.json files produces more ignorable files 199 | *.nuget.props 200 | *.nuget.targets 201 | 202 | # Microsoft Azure Build Output 203 | csx/ 204 | *.build.csdef 205 | 206 | # Microsoft Azure Emulator 207 | ecf/ 208 | rcf/ 209 | 210 | # Windows Store app package directories and files 211 | AppPackages/ 212 | BundleArtifacts/ 213 | Package.StoreAssociation.xml 214 | _pkginfo.txt 215 | *.appx 216 | *.appxbundle 217 | *.appxupload 218 | 219 | # Visual Studio cache files 220 | # files ending in .cache can be ignored 221 | *.[Cc]ache 222 | # but keep track of directories ending in .cache 223 | !?*.[Cc]ache/ 224 | 225 | # Others 226 | ClientBin/ 227 | ~$* 228 | *~ 229 | *.dbmdl 230 | *.dbproj.schemaview 231 | *.jfm 232 | *.pfx 233 | *.publishsettings 234 | orleans.codegen.cs 235 | 236 | # Including strong name files can present a security risk 237 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 238 | #*.snk 239 | 240 | # Since there are multiple workflows, uncomment next line to ignore bower_components 241 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 242 | #bower_components/ 243 | 244 | # RIA/Silverlight projects 245 | Generated_Code/ 246 | 247 | # Backup & report files from converting an old project file 248 | # to a newer Visual Studio version. Backup files are not needed, 249 | # because we have git ;-) 250 | _UpgradeReport_Files/ 251 | Backup*/ 252 | UpgradeLog*.XML 253 | UpgradeLog*.htm 254 | ServiceFabricBackup/ 255 | *.rptproj.bak 256 | 257 | # SQL Server files 258 | *.mdf 259 | *.ldf 260 | *.ndf 261 | 262 | # Business Intelligence projects 263 | *.rdl.data 264 | *.bim.layout 265 | *.bim_*.settings 266 | *.rptproj.rsuser 267 | *- [Bb]ackup.rdl 268 | *- [Bb]ackup ([0-9]).rdl 269 | *- [Bb]ackup ([0-9][0-9]).rdl 270 | 271 | # Microsoft Fakes 272 | FakesAssemblies/ 273 | 274 | # GhostDoc plugin setting file 275 | *.GhostDoc.xml 276 | 277 | # Node.js Tools for Visual Studio 278 | .ntvs_analysis.dat 279 | node_modules/ 280 | 281 | # Visual Studio 6 build log 282 | *.plg 283 | 284 | # Visual Studio 6 workspace options file 285 | *.opt 286 | 287 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 288 | *.vbw 289 | 290 | # Visual Studio LightSwitch build output 291 | **/*.HTMLClient/GeneratedArtifacts 292 | **/*.DesktopClient/GeneratedArtifacts 293 | **/*.DesktopClient/ModelManifest.xml 294 | **/*.Server/GeneratedArtifacts 295 | **/*.Server/ModelManifest.xml 296 | _Pvt_Extensions 297 | 298 | # Paket dependency manager 299 | .paket/paket.exe 300 | paket-files/ 301 | 302 | # FAKE - F# Make 303 | .fake/ 304 | 305 | # CodeRush personal settings 306 | .cr/personal 307 | 308 | # Python Tools for Visual Studio (PTVS) 309 | __pycache__/ 310 | *.pyc 311 | 312 | # Cake - Uncomment if you are using it 313 | # tools/** 314 | # !tools/packages.config 315 | 316 | # Tabs Studio 317 | *.tss 318 | 319 | # Telerik's JustMock configuration file 320 | *.jmconfig 321 | 322 | # BizTalk build output 323 | *.btp.cs 324 | *.btm.cs 325 | *.odx.cs 326 | *.xsd.cs 327 | 328 | # OpenCover UI analysis results 329 | OpenCover/ 330 | 331 | # Azure Stream Analytics local run output 332 | ASALocalRun/ 333 | 334 | # MSBuild Binary and Structured Log 335 | *.binlog 336 | 337 | # NVidia Nsight GPU debugger configuration file 338 | *.nvuser 339 | 340 | # MFractors (Xamarin productivity tool) working folder 341 | .mfractor/ 342 | 343 | # Local History for Visual Studio 344 | .localhistory/ 345 | 346 | # BeatPulse healthcheck temp database 347 | healthchecksdb 348 | 349 | # Backup folder for Package Reference Convert tool in Visual Studio 2017 350 | MigrationBackup/ 351 | 352 | # Ionide (cross platform F# VS Code tools) working folder 353 | .ionide/ 354 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "Il2CppAssemblyUnhollower"] 2 | path = Il2CppAssemblyUnhollower 3 | url = https://github.com/knah/Il2CppAssemblyUnhollower 4 | [submodule "Il2CppDumper"] 5 | path = Il2CppDumper 6 | url = https://github.com/Perfare/Il2CppDumper 7 | [submodule "SharpMonoInjector"] 8 | path = SharpMonoInjector 9 | url = https://github.com/shalzuth/SharpMonoInjector 10 | -------------------------------------------------------------------------------- /FallGuysSharp/FallGuysDumper/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /FallGuysSharp/FallGuysDumper/FallGuysDumper.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {42CF44B5-D371-47A9-8E17-575E3A53D56E} 8 | Exe 9 | FallGuysDumper 10 | FallGuysDumper 11 | v4.7.2 12 | 512 13 | true 14 | true 15 | 16 | 17 | AnyCPU 18 | true 19 | full 20 | false 21 | bin\Debug\ 22 | DEBUG;TRACE 23 | prompt 24 | 4 25 | 26 | 27 | AnyCPU 28 | pdbonly 29 | true 30 | bin\Release\ 31 | TRACE 32 | prompt 33 | 4 34 | 35 | 36 | true 37 | bin\x64\Debug\ 38 | DEBUG;TRACE 39 | full 40 | x64 41 | 7.3 42 | prompt 43 | MinimumRecommendedRules.ruleset 44 | true 45 | 46 | 47 | bin\x64\Release\ 48 | TRACE 49 | true 50 | pdbonly 51 | x64 52 | 7.3 53 | prompt 54 | MinimumRecommendedRules.ruleset 55 | true 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | {a8b617a1-c2fa-4fad-883f-8e5a49e80099} 77 | AssemblyUnhollower 78 | 79 | 80 | {0f4a75d3-d948-47c9-b8e7-e093381941bd} 81 | Il2CppDumper 82 | 83 | 84 | 85 | 86 | PreserveNewest 87 | 88 | 89 | 90 | -------------------------------------------------------------------------------- /FallGuysSharp/FallGuysDumper/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using System.Linq; 4 | using System.Reflection; 5 | 6 | namespace FallGuysDumper 7 | { 8 | class Program 9 | { 10 | static Int32 appId = 1097150; // could also pull from reading all appmanifests 11 | static String gameName = "Fall Guys"; 12 | static String steamPath = Path.Combine(Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"Software\Valve\Steam").GetValue("SteamPath").ToString(), "steamapps"); 13 | static String gamePath 14 | { 15 | get 16 | { 17 | if (File.Exists(Path.Combine(steamPath, $"appmanifest_{appId}.acf"))) 18 | return Path.Combine(steamPath, "common", gameName) + "\\"; 19 | var lib = File.ReadAllLines(Path.Combine(steamPath, "libraryfolders.vdf")); 20 | foreach (var line in lib) 21 | { 22 | if (line.Contains(@"\\")) 23 | { 24 | var path = line.Replace("\t", "").Replace("\\\\", "\\").Split(new char[1] { '"' }, StringSplitOptions.RemoveEmptyEntries)[1]; 25 | if (File.Exists(Path.Combine(path, $"steamapps\\appmanifest_{appId}.acf"))) 26 | return Path.Combine(path, "steamapps\\common", gameName) + "\\"; 27 | } 28 | } 29 | throw new Exception("Can't find game"); 30 | } 31 | } 32 | static void Main(string[] args) 33 | { 34 | var config = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + @"config.json"); 35 | config = config.Replace("\"RequireAnyKey\": true,", "\"RequireAnyKey\": false,"); 36 | File.WriteAllText(AppDomain.CurrentDomain.BaseDirectory + @"config.json", config); 37 | var Il2CppDumperProgram = Type.GetType("Il2CppDumper.Program, Il2CppDumper"); 38 | var Il2CppDumperMain = Il2CppDumperProgram.GetMethods(BindingFlags.NonPublic | BindingFlags.Static).FirstOrDefault(m => m.Name == "Main"); 39 | Il2CppDumperMain.Invoke(null, new object[1] { (new string[2] { gamePath + "FallGuys_client" + @"_Data\il2cpp_data\Metadata\global-metadata.dat", gamePath + @"GameAssembly.dll" }) }); 40 | 41 | var options = new AssemblyUnhollower.UnhollowerOptions(); 42 | options.AdditionalAssembliesBlacklist.Add("Mono.Security"); // always blacklist this one 43 | options.AdditionalAssembliesBlacklist.Add("Newtonsoft.Json"); // always blacklist this one 44 | options.UnityBaseLibsDir = AppDomain.CurrentDomain.BaseDirectory + "DummyDll"; 45 | options.SourceDir = AppDomain.CurrentDomain.BaseDirectory + "DummyDll"; 46 | options.OutputDir = AppDomain.CurrentDomain.BaseDirectory + "ProxyDll"; 47 | options.MscorlibPath = AppDomain.CurrentDomain.BaseDirectory + @"lib\mscorlib.dll"; 48 | var AssemblyUnhollowerProgram = Type.GetType("AssemblyUnhollower.Program, AssemblyUnhollower"); 49 | var AssemblyUnhollowerMain = AssemblyUnhollowerProgram.GetMethods(BindingFlags.Public | BindingFlags.Static).FirstOrDefault(m => m.Name == "Main" && m.GetParameters()[0].ParameterType == typeof(AssemblyUnhollower.UnhollowerOptions)); 50 | AssemblyUnhollowerMain.Invoke(null, new object[1] { options }); 51 | } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /FallGuysSharp/FallGuysDumper/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("FallGuysDumper")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("FallGuysDumper")] 13 | [assembly: AssemblyCopyright("Copyright © 2020")] 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("42cf44b5-d371-47a9-8e17-575e3a53d56e")] 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 | -------------------------------------------------------------------------------- /FallGuysSharp/FallGuysDumper/lib/mscorlib.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shalzuth/FallGuysSharp/ae446fd9580b01eec7acc6c8b0cd5a2d79345abc/FallGuysSharp/FallGuysDumper/lib/mscorlib.dll -------------------------------------------------------------------------------- /FallGuysSharp/FallGuysMods/Common/ModBase.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace FallGuysMods 4 | { 5 | public class ModBase 6 | { 7 | public String ModName { get; set; } = "Mod Name"; 8 | public virtual Boolean HasConfig { get; set; } = false; 9 | public virtual Single SliderVal { get; set; } = 5; 10 | public virtual Single SliderMin { get; set; } = 0; 11 | public virtual Single SliderMax { get; set; } = 10; 12 | public Boolean Enabled { get; set; } = false; 13 | public virtual void Start() { } 14 | public virtual void Update() { } 15 | public virtual void OnGUI() { } 16 | public virtual void OnDisable() { } 17 | public virtual void OnEnable() { } 18 | } 19 | } -------------------------------------------------------------------------------- /FallGuysSharp/FallGuysMods/Common/ModManager.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | using UnityEngine.UI; 5 | 6 | namespace FallGuysMods 7 | { 8 | public class ModManager : MonoBehaviour 9 | { 10 | public ModManager(IntPtr intPtr) : base(intPtr) { } 11 | public List Mods = new List(); 12 | void OnGUI() 13 | { 14 | foreach (var mod in Mods) 15 | if (mod.Enabled) mod.OnGUI(); 16 | if (Cursor.lockState == CursorLockMode.Locked) return; 17 | var area = new Rect(25, 25, 150, 250); 18 | GUI.Box(area, "shalzuth's mods"); 19 | GUILayout.BeginArea(area); 20 | GUILayout.Space(12); 21 | foreach (var mod in Mods) 22 | { 23 | var val = GUILayout.Toggle(mod.Enabled, mod.GetType().Name, new GUILayoutOption[0]); 24 | if (val != mod.Enabled) 25 | { 26 | if (val) mod.OnEnable(); 27 | else mod.OnDisable(); 28 | mod.Enabled = val; 29 | } 30 | //if (mod.Enabled && mod.HasConfig) 31 | // mod.SliderVal = GUILayout.hori(mod.SliderVal, mod.SliderMin, mod.SliderMax, new GUIStyle(GUI.skin.horizontalSlider), new GUIStyle(GUI.skin.horizontalSliderThumb), new GUILayoutOption[0]); 32 | if (mod.Enabled) 33 | mod.OnGUI(); 34 | } 35 | GUILayout.EndArea(); 36 | } 37 | void Update() 38 | { 39 | foreach (var mod in Mods) 40 | if (mod.Enabled) mod.Update(); 41 | } 42 | void OnDisable() 43 | { 44 | foreach (var mod in Mods) 45 | if (mod.Enabled) mod.OnDisable(); 46 | 47 | } 48 | } 49 | } -------------------------------------------------------------------------------- /FallGuysSharp/FallGuysMods/FallGuysMods.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {6F2C5FB4-8A2A-4DB7-9F6C-068342197B56} 8 | Library 9 | Properties 10 | FallGuysMods 11 | FallGuysMods 12 | v4.7.2 13 | 512 14 | true 15 | 16 | 17 | true 18 | full 19 | false 20 | bin\Debug\ 21 | DEBUG;TRACE 22 | prompt 23 | 4 24 | true 25 | 26 | 27 | pdbonly 28 | true 29 | bin\Release\ 30 | TRACE 31 | prompt 32 | 4 33 | 34 | 35 | true 36 | bin\x64\Debug\ 37 | DEBUG;TRACE 38 | true 39 | full 40 | x64 41 | 7.3 42 | prompt 43 | MinimumRecommendedRules.ruleset 44 | 45 | 46 | bin\x64\Release\ 47 | TRACE 48 | true 49 | pdbonly 50 | x64 51 | 7.3 52 | prompt 53 | MinimumRecommendedRules.ruleset 54 | 55 | 56 | 57 | ..\FallGuysDumper\bin\x64\Debug\ProxyDll\Assembly-CSharp.dll 58 | 59 | 60 | ..\FallGuysDumper\bin\x64\Debug\ProxyDll\Assembly-CSharp-firstpass.dll 61 | 62 | 63 | False 64 | ..\FallGuysDumper\bin\x64\Debug\ProxyDll\FallGuys.Player.Protocol.Client.dll 65 | 66 | 67 | ..\FallGuysDumper\bin\x64\Debug\ProxyDll\Il2Cppmscorlib.dll 68 | 69 | 70 | ..\FallGuysDumper\bin\x64\Debug\ProxyDll\MT.FGClient.dll 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | ..\FallGuysDumper\bin\x64\Debug\ProxyDll\TheMultiplayerGuys.FGCommon.dll 82 | 83 | 84 | ..\FallGuysDumper\bin\x64\Debug\ProxyDll\TheMultiplayerGuys.Utility.dll 85 | 86 | 87 | ..\FallGuysDumper\bin\x64\Debug\ProxyDll\UnhollowerBaseLib.dll 88 | 89 | 90 | ..\FallGuysDumper\bin\x64\Debug\ProxyDll\UnhollowerRuntimeLib.dll 91 | 92 | 93 | ..\FallGuysDumper\bin\x64\Debug\ProxyDll\UnityEngine.dll 94 | 95 | 96 | ..\FallGuysDumper\bin\x64\Debug\ProxyDll\UnityEngine.CoreModule.dll 97 | 98 | 99 | ..\FallGuysDumper\bin\x64\Debug\ProxyDll\UnityEngine.IMGUIModule.dll 100 | 101 | 102 | ..\FallGuysDumper\bin\x64\Debug\ProxyDll\UnityEngine.PhysicsModule.dll 103 | 104 | 105 | ..\FallGuysDumper\bin\x64\Debug\ProxyDll\UnityEngine.UI.dll 106 | 107 | 108 | ..\FallGuysDumper\bin\x64\Debug\ProxyDll\UnityEngine.UIElementsModule.dll 109 | 110 | 111 | ..\FallGuysDumper\bin\x64\Debug\ProxyDll\UnityEngine.UIModule.dll 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | -------------------------------------------------------------------------------- /FallGuysSharp/FallGuysMods/Init.cs: -------------------------------------------------------------------------------- 1 | using System.Text; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.IO; 5 | using System.Linq; 6 | using System.Reflection; 7 | using System.Runtime.InteropServices; 8 | using UnhollowerBaseLib; 9 | using UnhollowerRuntimeLib; 10 | using UnityEngine; 11 | using UnhollowerBaseLib.Runtime; 12 | 13 | namespace FallGuysMods 14 | { 15 | public unsafe class Init 16 | { 17 | public static GameObject BaseObject; 18 | public static void Setup() 19 | { 20 | #if DEBUG 21 | Console.WriteLine(Environment.Version); 22 | Console.WriteLine(Application.unityVersion); 23 | Console.WriteLine(Directory.GetCurrentDirectory()); 24 | 25 | LogSupport.RemoveAllHandlers(); 26 | LogSupport.TraceHandler += LogSupport_TraceHandler; 27 | LogSupport.ErrorHandler += LogSupport_TraceHandler; 28 | LogSupport.InfoHandler += LogSupport_TraceHandler; 29 | LogSupport.WarningHandler += LogSupport_TraceHandler; 30 | #endif 31 | 32 | ClassInjector.DoHook?.GetInvocationList().ToList().ForEach(d => ClassInjector.DoHook -= (Action)d); 33 | ClassInjector.DoHook += JmpPatch; 34 | UnityVersionHandler.Initialize(2019, 3, 14); 35 | ClassInjector.RegisterTypeInIl2Cpp(); 36 | 37 | while (BaseObject = GameObject.Find("ModManager")) 38 | GameObject.DestroyImmediate(BaseObject); 39 | BaseObject = new GameObject("ModManager"); 40 | GameObject.DontDestroyOnLoad(BaseObject); 41 | var modMgr = BaseObject.AddComponent(); 42 | var types = Assembly.GetExecutingAssembly().GetTypes().ToList().Where(t => t.BaseType == typeof(ModBase) && !t.IsNested); 43 | foreach (var type in types) 44 | modMgr.Mods.Add((ModBase)Activator.CreateInstance(type)); 45 | } 46 | 47 | private static void LogSupport_TraceHandler(string obj) 48 | { 49 | //File.AppendAllText(@"log.txt", obj + "\n"); 50 | Console.WriteLine(obj); 51 | } 52 | [DllImport("kernel32")] static extern bool FlushInstructionCache(IntPtr hProcess, IntPtr lpBaseAddress, UIntPtr dwSize); 53 | [DllImport("kernel32")] static extern IntPtr GetCurrentProcess(); 54 | [DllImport("kernel32")] static extern bool VirtualProtect(IntPtr lpAddress, UIntPtr dwSize, uint flNewProtect, out uint lpflOldProtect); 55 | [DllImport("kernel32")] static extern IntPtr VirtualAllocEx(IntPtr hProcess, IntPtr lpAddress, Int32 dwSize, Int32 flAllocationType, Int32 flProtect); 56 | [DllImport("kernel32")] static extern IntPtr GetModuleHandle(string lpModuleName); 57 | public static void JmpPatch(IntPtr originalPtr, IntPtr replacement) 58 | { 59 | var origCodeLoc = Marshal.ReadIntPtr(originalPtr); 60 | var jmpToNew = new List(); 61 | jmpToNew.AddRange(new Byte[] { 0x49, 0xBB }); // mov r11, replacement 62 | jmpToNew.AddRange(BitConverter.GetBytes(replacement.ToInt64())); 63 | jmpToNew.AddRange(new Byte[] { 0x41, 0xFF, 0xE3 }); // jmp r11 64 | var origCode = new byte[0x12]; 65 | Marshal.Copy(origCodeLoc, origCode, 0, origCode.Length); 66 | var jmpToOrig = new List(); 67 | jmpToOrig.AddRange(origCode); 68 | jmpToOrig.AddRange(new Byte[] { 0x49, 0xBB }); // mov r11, replacement 69 | jmpToOrig.AddRange(BitConverter.GetBytes((origCodeLoc + origCode.Length).ToInt64())); 70 | jmpToOrig.AddRange(new Byte[] { 0x41, 0xFF, 0xE3 }); // jmp r11 71 | var newFuncLocation = VirtualAllocEx(GetCurrentProcess(), IntPtr.Zero, 0x100, 0x3000, 0x40); 72 | Marshal.Copy(jmpToOrig.ToArray(), 0, newFuncLocation, jmpToOrig.ToArray().Length); 73 | 74 | VirtualProtect(origCodeLoc, (UIntPtr)jmpToNew.ToArray().Length, (UInt32)0x40, out UInt32 old); 75 | Marshal.Copy(jmpToNew.ToArray(), 0, origCodeLoc, jmpToNew.ToArray().Length); 76 | FlushInstructionCache(GetCurrentProcess(), origCodeLoc, (UIntPtr)jmpToNew.ToArray().Length); 77 | VirtualProtect(origCodeLoc, (UIntPtr)jmpToNew.ToArray().Length, old, out UInt32 _); 78 | 79 | Marshal.WriteIntPtr(originalPtr, newFuncLocation); 80 | } 81 | public static void JmpUnPatch(IntPtr originalPtr, IntPtr replacement) 82 | { 83 | // todo 84 | } 85 | unsafe public static void Hook(IntPtr original, IntPtr target) 86 | { 87 | IntPtr originalPtr = original; 88 | IntPtr* targetVarPointer = &originalPtr; 89 | JmpPatch((IntPtr)targetVarPointer, target); 90 | } 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /FallGuysSharp/FallGuysMods/Mods/AvoidDataCheck.cs: -------------------------------------------------------------------------------- 1 | using FGClient; 2 | using UnityEngine; 3 | namespace FallGuysMods 4 | { 5 | public class AvoidDataCheck : ModBase 6 | { 7 | public override void Update() 8 | { 9 | var clientGameManager = GlobalGameStateClient.Instance.GameStateView.GetLiveClientGameManager(); 10 | clientGameManager._characterDataMonitor._timeToRunNextCharacterControllerDataCheck = 3; 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /FallGuysSharp/FallGuysMods/Mods/FreezeMe.cs: -------------------------------------------------------------------------------- 1 | using FGClient; 2 | using UnityEngine; 3 | namespace FallGuysMods 4 | { 5 | public class FreezeMe : ModBase 6 | { 7 | Vector3 FreezePos = Vector3.zero; 8 | GameObject cube; 9 | public override void OnEnable() 10 | { 11 | var clientGameManager = GlobalGameStateClient.Instance.GameStateView.GetLiveClientGameManager(); 12 | var players = clientGameManager._localPlayers; 13 | foreach (var player in players) FreezePos = player.Value.transform.position; 14 | cube = GameObject.CreatePrimitive(PrimitiveType.Plane); 15 | cube.transform.position = FreezePos; 16 | cube.transform.position -= 2 * Vector3.up; 17 | } 18 | public override void Update() 19 | { 20 | var clientGameManager = GlobalGameStateClient.Instance.GameStateView.GetLiveClientGameManager(); 21 | var players = clientGameManager._localPlayers; 22 | foreach (var player in players) player.Value.transform.position = FreezePos; 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /FallGuysSharp/FallGuysMods/Mods/LevelHelper.cs: -------------------------------------------------------------------------------- 1 | using FGClient; 2 | using UnityEngine; 3 | namespace FallGuysMods 4 | { 5 | public class LevelHelper : ModBase 6 | { 7 | public override void OnEnable() 8 | { 9 | var clientGameManager = GlobalGameStateClient.Instance.GameStateView.GetLiveClientGameManager(); 10 | var tiptoes2 = GameObject.Find("Spinner"); 11 | var tiptoes = Object.FindObjectsOfType(); 12 | foreach(var tiptoe in tiptoes) 13 | { 14 | if (tiptoe.IsFakePlatform) GameObject.Destroy(tiptoe.gameObject); 15 | } 16 | var realDoors = Object.FindObjectsOfType(); 17 | foreach(var door in realDoors) 18 | { 19 | //door.gameObject.transform.localScale = new Vector3(2, 2, 2); 20 | GameObject.Destroy(door.gameObject); 21 | } 22 | var players = clientGameManager._players; 23 | foreach(var player in players) 24 | { 25 | if (player.Value._tailTagAccessory._isAccessoryEnabled) player.Value.transform.localScale = new Vector3(3, 3, 3); 26 | else player.Value.transform.localScale = new Vector3(1, 1, 1); 27 | } 28 | var matchFallManager = clientGameManager.GetGameSystem(); 29 | if (matchFallManager != null) 30 | { 31 | foreach (var tile in matchFallManager.Tiles) 32 | { 33 | if (tile._tileSurfaceOnObject.gameObject.activeInHierarchy) tile.gameObject.SetActive(true); 34 | if (tile._tileSurfaceOffObject.gameObject.activeInHierarchy) tile.gameObject.SetActive(false); 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /FallGuysSharp/FallGuysMods/Mods/SceneDebugger.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Concurrent; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Reflection; 6 | using UnityEngine; 7 | 8 | namespace FallGuysMods 9 | { 10 | public class SceneDebugger : ModBase 11 | { 12 | Int32 HierarchyWindowId; 13 | Int32 ProjectWindowId { get { return HierarchyWindowId + 1; } } 14 | Int32 InspectorWindowId { get { return ProjectWindowId + 1; } } 15 | Int32 Margin = 50; 16 | Rect HierarchyWindow; 17 | Int32 HierarchyWidth = 400; 18 | Vector2 HierarchyScrollPos; 19 | String SearchText = ""; 20 | Vector2 PropertiesScrollPos; 21 | Transform SelectedGameObject; 22 | List ExpandedObjs = new List(); 23 | 24 | Rect ProjectWindow; 25 | Int32 ProjectWidth = 400; 26 | Vector2 ProjectScrollPos; 27 | ConcurrentDictionary ExpandedObjects = new ConcurrentDictionary(); 28 | 29 | Rect InspectorWindow; 30 | Int32 InspectorWidth = 350; 31 | 32 | public override void OnEnable() 33 | { 34 | ModName = "Scene Debugger"; 35 | HasConfig = false; 36 | HierarchyWindowId = GetHashCode(); 37 | 38 | HierarchyWindow = new Rect(Screen.width - HierarchyWidth - Margin, Margin, HierarchyWidth, Screen.height - Margin * 2); 39 | ProjectWindow = new Rect(HierarchyWindow.x - Margin - ProjectWidth, Margin, ProjectWidth, Screen.height - Margin * 2); 40 | InspectorWindow = new Rect(ProjectWindow.x - Margin - InspectorWidth, Margin, InspectorWidth, Screen.height - Margin * 2); 41 | } 42 | public override void OnGUI() 43 | { 44 | HierarchyWindow = GUILayout.Window(HierarchyWindowId, HierarchyWindow, (GUI.WindowFunction)HierarchyWindowMethod, "Hierarchy", new GUILayoutOption[0]); 45 | ProjectWindow = GUILayout.Window(ProjectWindowId, ProjectWindow, (GUI.WindowFunction)ProjectWindowMethod, "Project", new GUILayoutOption[0]); 46 | } 47 | #region Hierarchy GUI 48 | void DisplayGameObject(GameObject gameObj, Int32 level) 49 | { 50 | GUILayout.BeginHorizontal(new GUILayoutOption[0]); 51 | { 52 | GUILayout.Space(level * 20); 53 | var color = GUI.color; 54 | if (SelectedGameObject == gameObj.transform) 55 | GUI.color = Color.green; 56 | if (!gameObj.activeSelf && gameObj.transform.childCount == 0) 57 | GUI.color = Color.magenta; 58 | else if (gameObj.transform.childCount == 0) 59 | GUI.color = Color.yellow; 60 | else if (!gameObj.activeSelf) 61 | GUI.color = Color.red; 62 | if (GUILayout.Toggle(ExpandedObjs.Contains(gameObj.name), gameObj.name, new GUILayoutOption[1] { GUILayout.ExpandWidth(false) })) 63 | { 64 | if (!ExpandedObjs.Contains(gameObj.name)) 65 | { 66 | ExpandedObjs.Add(gameObj.name); 67 | SelectedGameObject = gameObj.transform; 68 | } 69 | } 70 | else 71 | { 72 | if (ExpandedObjs.Contains(gameObj.name)) 73 | { 74 | ExpandedObjs.Remove(gameObj.name); 75 | SelectedGameObject = gameObj.transform; 76 | } 77 | } 78 | GUI.color = color; 79 | } 80 | GUILayout.EndHorizontal(); 81 | if (ExpandedObjs.Contains(gameObj.name)) 82 | for (var i = 0; i < gameObj.transform.childCount; ++i) 83 | DisplayGameObject(gameObj.transform.GetChild(i).gameObject, level + 1); 84 | } 85 | void HierarchyWindowMethod(Int32 id) 86 | { 87 | GUILayout.BeginVertical(GUIContent.none, GUI.skin.box, new GUILayoutOption[0]);// { GUI.skin.box }); 88 | { 89 | GUILayout.BeginHorizontal(new GUILayoutOption[0]); 90 | { 91 | SearchText = GUILayout.TextField(SearchText, new GUILayoutOption[1] { GUILayout.ExpandWidth(true) }); 92 | if (GUILayout.Button("Search", new GUILayoutOption[1] { GUILayout.ExpandWidth(false) })) 93 | { } 94 | } 95 | GUILayout.EndHorizontal(); 96 | var rootObjects = new List(); 97 | foreach (Transform xform in GameObject.FindObjectsOfType()) 98 | if (xform.parent == null) 99 | rootObjects.Add(xform.gameObject); 100 | //var rootObjects = UnityEngine.SceneManagement.SceneManager.GetActiveScene().GetRootGameObjects(); 101 | if (SelectedGameObject == null) 102 | SelectedGameObject = rootObjects.First().transform; 103 | HierarchyScrollPos = GUILayout.BeginScrollView(HierarchyScrollPos, new GUILayoutOption[2] { GUILayout.Height(HierarchyWindow.height / 3), GUILayout.ExpandWidth(true) }); 104 | { 105 | foreach (var rootObject in rootObjects) 106 | DisplayGameObject(rootObject, 0); 107 | } 108 | GUILayout.EndScrollView(); 109 | } 110 | GUILayout.EndVertical(); 111 | GUILayout.BeginVertical(GUIContent.none, GUI.skin.box, new GUILayoutOption[0]);//GUI.skin.box); 112 | { 113 | PropertiesScrollPos = GUILayout.BeginScrollView(PropertiesScrollPos, new GUILayoutOption[0]);// GUI.skin.box); 114 | { 115 | var fullName = SelectedGameObject.name; 116 | var parentTransform = SelectedGameObject.parent; 117 | while (parentTransform != null) 118 | { 119 | fullName = parentTransform.name + "/" + fullName; 120 | parentTransform = parentTransform.parent; 121 | } 122 | GUILayout.Label(fullName, new GUILayoutOption[0]); 123 | GUILayout.BeginHorizontal(new GUILayoutOption[0]); 124 | { 125 | GUILayout.Label(SelectedGameObject.gameObject.layer + " : " + LayerMask.LayerToName(SelectedGameObject.gameObject.layer), new GUILayoutOption[0]); 126 | GUILayout.FlexibleSpace(); 127 | SelectedGameObject.gameObject.SetActive(GUILayout.Toggle(SelectedGameObject.gameObject.activeSelf, "Active", new GUILayoutOption[1] { GUILayout.ExpandWidth(false) })); 128 | if (GUILayout.Button("?", new GUILayoutOption[0])) 129 | Console.WriteLine("?"); 130 | if (GUILayout.Button("X", new GUILayoutOption[0])) 131 | GameObject.Destroy(SelectedGameObject.gameObject); 132 | } 133 | GUILayout.EndHorizontal(); 134 | foreach (var component in SelectedGameObject.GetComponents()) 135 | { 136 | GUILayout.BeginHorizontal(GUIContent.none, GUI.skin.box, new GUILayoutOption[0]);// GUI.skin.box); 137 | { 138 | 139 | if (component is Behaviour) 140 | (component as Behaviour).enabled = GUILayout.Toggle((component as Behaviour).enabled, "", new GUILayoutOption[1] { GUILayout.ExpandWidth(false) }); 141 | 142 | GUILayout.Label(component.GetType().Name + " : " + component.GetType().Namespace, new GUILayoutOption[0]); 143 | GUILayout.FlexibleSpace(); 144 | if (GUILayout.Button("?", new GUILayoutOption[0])) 145 | Console.WriteLine("?"); 146 | if (!(component is Transform)) 147 | if (GUILayout.Button("X", new GUILayoutOption[0])) 148 | GameObject.Destroy(component); 149 | } 150 | GUILayout.EndHorizontal(); 151 | } 152 | } 153 | GUILayout.EndScrollView(); 154 | } 155 | GUILayout.EndVertical(); 156 | GUI.DragWindow(); 157 | } 158 | #endregion 159 | #region Project GUI 160 | void ProjectWindowMethod(Int32 id) 161 | { 162 | GUILayout.BeginVertical(GUIContent.none, GUI.skin.box, new GUILayoutOption[0]);// GUI.skin.box); 163 | { 164 | ProjectScrollPos = GUILayout.BeginScrollView(ProjectScrollPos, new GUILayoutOption[2] { GUILayout.Height(ProjectWindow.height / 3), GUILayout.ExpandWidth(true) }); 165 | { 166 | var assemblies = AppDomain.CurrentDomain.GetAssemblies(); 167 | foreach (var assembly in assemblies) 168 | { 169 | ExpandedObjects[assembly] = GUILayout.Toggle(ExpandedObjects.ContainsKey(assembly) ? ExpandedObjects[assembly] : false, assembly.GetName().Name, new GUILayoutOption[1] { GUILayout.ExpandWidth(false) }); 170 | if (ExpandedObjects[assembly]) 171 | { 172 | var types = assembly.GetTypes().Where(t => t.IsClass && !t.IsAbstract && !t.ContainsGenericParameters).ToList(); 173 | foreach (var type in types) 174 | { 175 | var staticfields = type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.FlattenHierarchy).Count(f => f.Name != "OffsetOfInstanceIDInCPlusPlusObject"); 176 | if (staticfields == 0) 177 | continue; 178 | GUILayout.BeginHorizontal(new GUILayoutOption[0]); 179 | { 180 | var color = GUI.color; 181 | GUILayout.Space(20); 182 | ExpandedObjects[type] = GUILayout.Toggle(ExpandedObjects.ContainsKey(type) ? ExpandedObjects[type] : false, type.Name, new GUILayoutOption[1] { GUILayout.ExpandWidth(false) }); 183 | GUI.color = color; 184 | } 185 | GUILayout.EndHorizontal(); 186 | if (ExpandedObjects[type]) 187 | { 188 | var fields = type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.FlattenHierarchy); 189 | foreach (var field in fields) 190 | { 191 | if (field.Name == "OffsetOfInstanceIDInCPlusPlusObject") continue; 192 | //var val = field.GetValue(null); 193 | GUILayout.BeginHorizontal(new GUILayoutOption[0]); 194 | { 195 | GUILayout.Space(40); 196 | ExpandedObjects[field] = GUILayout.Toggle(ExpandedObjects.ContainsKey(field) ? ExpandedObjects[field] : false, field.Name + " : " + field.FieldType, GUI.skin.label, new GUILayoutOption[1] { GUILayout.ExpandWidth(false) }); 197 | } 198 | GUILayout.EndHorizontal(); 199 | } 200 | } 201 | } 202 | } 203 | } 204 | } 205 | GUILayout.EndScrollView(); 206 | } 207 | GUILayout.EndVertical(); 208 | GUI.DragWindow(); 209 | } 210 | #endregion 211 | } 212 | } -------------------------------------------------------------------------------- /FallGuysSharp/FallGuysMods/Mods/WinRace.cs: -------------------------------------------------------------------------------- 1 | using FGClient; 2 | using UnityEngine; 3 | using System.Runtime.InteropServices; 4 | using FG.Common; 5 | 6 | namespace FallGuysMods 7 | { 8 | public class WinRace : ModBase 9 | { 10 | public override void OnEnable() 11 | { 12 | // ugh Input.GetKey isn't compiled... need to use Rewired 13 | //if ((GetKeyState(VirtualKeyStates.VK_F1) & 0x8000) == 0x8000){ 14 | var endZone = GameObject.FindObjectOfType(); 15 | if (endZone != null) 16 | { 17 | var _localPlayers = GlobalGameStateClient.Instance.GameStateView.GetLiveClientGameManager()._localPlayers; 18 | //foreach (var p in _localPlayers) COMMON_ObjectiveBase.m_OnObjectiveSatisfied_SERVERONLY.Invoke(p.Key, endZone); 19 | foreach (var p in _localPlayers) p.Value.transform.position = endZone.transform.position; 20 | 21 | } 22 | //} 23 | } 24 | enum VirtualKeyStates : int 25 | { 26 | VK_LBUTTON = 0x01, 27 | VK_RBUTTON = 0x02, 28 | VK_CANCEL = 0x03, 29 | VK_MBUTTON = 0x04, 30 | // 31 | VK_XBUTTON1 = 0x05, 32 | VK_XBUTTON2 = 0x06, 33 | // 34 | VK_BACK = 0x08, 35 | VK_TAB = 0x09, 36 | // 37 | VK_CLEAR = 0x0C, 38 | VK_RETURN = 0x0D, 39 | // 40 | VK_SHIFT = 0x10, 41 | VK_CONTROL = 0x11, 42 | VK_MENU = 0x12, 43 | VK_PAUSE = 0x13, 44 | VK_CAPITAL = 0x14, 45 | // 46 | VK_KANA = 0x15, 47 | VK_HANGEUL = 0x15, /* old name - should be here for compatibility */ 48 | VK_HANGUL = 0x15, 49 | VK_JUNJA = 0x17, 50 | VK_FINAL = 0x18, 51 | VK_HANJA = 0x19, 52 | VK_KANJI = 0x19, 53 | // 54 | VK_ESCAPE = 0x1B, 55 | // 56 | VK_CONVERT = 0x1C, 57 | VK_NONCONVERT = 0x1D, 58 | VK_ACCEPT = 0x1E, 59 | VK_MODECHANGE = 0x1F, 60 | // 61 | VK_SPACE = 0x20, 62 | VK_PRIOR = 0x21, 63 | VK_NEXT = 0x22, 64 | VK_END = 0x23, 65 | VK_HOME = 0x24, 66 | VK_LEFT = 0x25, 67 | VK_UP = 0x26, 68 | VK_RIGHT = 0x27, 69 | VK_DOWN = 0x28, 70 | VK_SELECT = 0x29, 71 | VK_PRINT = 0x2A, 72 | VK_EXECUTE = 0x2B, 73 | VK_SNAPSHOT = 0x2C, 74 | VK_INSERT = 0x2D, 75 | VK_DELETE = 0x2E, 76 | VK_HELP = 0x2F, 77 | // 78 | VK_LWIN = 0x5B, 79 | VK_RWIN = 0x5C, 80 | VK_APPS = 0x5D, 81 | // 82 | VK_SLEEP = 0x5F, 83 | // 84 | VK_NUMPAD0 = 0x60, 85 | VK_NUMPAD1 = 0x61, 86 | VK_NUMPAD2 = 0x62, 87 | VK_NUMPAD3 = 0x63, 88 | VK_NUMPAD4 = 0x64, 89 | VK_NUMPAD5 = 0x65, 90 | VK_NUMPAD6 = 0x66, 91 | VK_NUMPAD7 = 0x67, 92 | VK_NUMPAD8 = 0x68, 93 | VK_NUMPAD9 = 0x69, 94 | VK_MULTIPLY = 0x6A, 95 | VK_ADD = 0x6B, 96 | VK_SEPARATOR = 0x6C, 97 | VK_SUBTRACT = 0x6D, 98 | VK_DECIMAL = 0x6E, 99 | VK_DIVIDE = 0x6F, 100 | VK_F1 = 0x70, 101 | VK_F2 = 0x71, 102 | VK_F3 = 0x72, 103 | VK_F4 = 0x73, 104 | VK_F5 = 0x74, 105 | VK_F6 = 0x75, 106 | VK_F7 = 0x76, 107 | VK_F8 = 0x77, 108 | VK_F9 = 0x78, 109 | VK_F10 = 0x79, 110 | VK_F11 = 0x7A, 111 | VK_F12 = 0x7B, 112 | VK_F13 = 0x7C, 113 | VK_F14 = 0x7D, 114 | VK_F15 = 0x7E, 115 | VK_F16 = 0x7F, 116 | VK_F17 = 0x80, 117 | VK_F18 = 0x81, 118 | VK_F19 = 0x82, 119 | VK_F20 = 0x83, 120 | VK_F21 = 0x84, 121 | VK_F22 = 0x85, 122 | VK_F23 = 0x86, 123 | VK_F24 = 0x87, 124 | // 125 | VK_NUMLOCK = 0x90, 126 | VK_SCROLL = 0x91, 127 | // 128 | VK_OEM_NEC_EQUAL = 0x92, // '=' key on numpad 129 | // 130 | VK_OEM_FJ_JISHO = 0x92, // 'Dictionary' key 131 | VK_OEM_FJ_MASSHOU = 0x93, // 'Unregister word' key 132 | VK_OEM_FJ_TOUROKU = 0x94, // 'Register word' key 133 | VK_OEM_FJ_LOYA = 0x95, // 'Left OYAYUBI' key 134 | VK_OEM_FJ_ROYA = 0x96, // 'Right OYAYUBI' key 135 | // 136 | VK_LSHIFT = 0xA0, 137 | VK_RSHIFT = 0xA1, 138 | VK_LCONTROL = 0xA2, 139 | VK_RCONTROL = 0xA3, 140 | VK_LMENU = 0xA4, 141 | VK_RMENU = 0xA5, 142 | // 143 | VK_BROWSER_BACK = 0xA6, 144 | VK_BROWSER_FORWARD = 0xA7, 145 | VK_BROWSER_REFRESH = 0xA8, 146 | VK_BROWSER_STOP = 0xA9, 147 | VK_BROWSER_SEARCH = 0xAA, 148 | VK_BROWSER_FAVORITES = 0xAB, 149 | VK_BROWSER_HOME = 0xAC, 150 | // 151 | VK_VOLUME_MUTE = 0xAD, 152 | VK_VOLUME_DOWN = 0xAE, 153 | VK_VOLUME_UP = 0xAF, 154 | VK_MEDIA_NEXT_TRACK = 0xB0, 155 | VK_MEDIA_PREV_TRACK = 0xB1, 156 | VK_MEDIA_STOP = 0xB2, 157 | VK_MEDIA_PLAY_PAUSE = 0xB3, 158 | VK_LAUNCH_MAIL = 0xB4, 159 | VK_LAUNCH_MEDIA_SELECT = 0xB5, 160 | VK_LAUNCH_APP1 = 0xB6, 161 | VK_LAUNCH_APP2 = 0xB7, 162 | // 163 | VK_OEM_1 = 0xBA, // ';:' for US 164 | VK_OEM_PLUS = 0xBB, // '+' any country 165 | VK_OEM_COMMA = 0xBC, // ',' any country 166 | VK_OEM_MINUS = 0xBD, // '-' any country 167 | VK_OEM_PERIOD = 0xBE, // '.' any country 168 | VK_OEM_2 = 0xBF, // '/?' for US 169 | VK_OEM_3 = 0xC0, // '`~' for US 170 | // 171 | VK_OEM_4 = 0xDB, // '[{' for US 172 | VK_OEM_5 = 0xDC, // '\|' for US 173 | VK_OEM_6 = 0xDD, // ']}' for US 174 | VK_OEM_7 = 0xDE, // ''"' for US 175 | VK_OEM_8 = 0xDF, 176 | // 177 | VK_OEM_AX = 0xE1, // 'AX' key on Japanese AX kbd 178 | VK_OEM_102 = 0xE2, // "<>" or "\|" on RT 102-key kbd. 179 | VK_ICO_HELP = 0xE3, // Help key on ICO 180 | VK_ICO_00 = 0xE4, // 00 key on ICO 181 | // 182 | VK_PROCESSKEY = 0xE5, 183 | // 184 | VK_ICO_CLEAR = 0xE6, 185 | // 186 | VK_PACKET = 0xE7, 187 | // 188 | VK_OEM_RESET = 0xE9, 189 | VK_OEM_JUMP = 0xEA, 190 | VK_OEM_PA1 = 0xEB, 191 | VK_OEM_PA2 = 0xEC, 192 | VK_OEM_PA3 = 0xED, 193 | VK_OEM_WSCTRL = 0xEE, 194 | VK_OEM_CUSEL = 0xEF, 195 | VK_OEM_ATTN = 0xF0, 196 | VK_OEM_FINISH = 0xF1, 197 | VK_OEM_COPY = 0xF2, 198 | VK_OEM_AUTO = 0xF3, 199 | VK_OEM_ENLW = 0xF4, 200 | VK_OEM_BACKTAB = 0xF5, 201 | // 202 | VK_ATTN = 0xF6, 203 | VK_CRSEL = 0xF7, 204 | VK_EXSEL = 0xF8, 205 | VK_EREOF = 0xF9, 206 | VK_PLAY = 0xFA, 207 | VK_ZOOM = 0xFB, 208 | VK_NONAME = 0xFC, 209 | VK_PA1 = 0xFD, 210 | VK_OEM_CLEAR = 0xFE 211 | } 212 | [DllImport("user32")] static extern short GetKeyState(VirtualKeyStates nVirtKey); 213 | } 214 | } 215 | -------------------------------------------------------------------------------- /FallGuysSharp/FallGuysMods/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("FallGuysMods")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("FallGuysMods")] 13 | [assembly: AssemblyCopyright("Copyright © shalzuth 2020")] 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("6f2c5fb4-8a2a-4db7-9f6c-068342197b56")] 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 | -------------------------------------------------------------------------------- /FallGuysSharp/FallGuysSharp.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 16 4 | VisualStudioVersion = 16.0.30320.27 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FallGuysSharp", "FallGuysSharp\FallGuysSharp.csproj", "{A35D63AA-87F3-49CF-B80C-A324B53C1115}" 7 | EndProject 8 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AssemblyUnhollower", "..\Il2CppAssemblyUnhollower\AssemblyUnhollower\AssemblyUnhollower.csproj", "{A8B617A1-C2FA-4FAD-883F-8E5A49E80099}" 9 | EndProject 10 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UnhollowerBaseLib", "..\Il2CppAssemblyUnhollower\UnhollowerBaseLib\UnhollowerBaseLib.csproj", "{E3C6839D-7A27-481A-ABB9-D03D8DBD73A8}" 11 | EndProject 12 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UnhollowerRuntimeLib", "..\Il2CppAssemblyUnhollower\UnhollowerRuntimeLib\UnhollowerRuntimeLib.csproj", "{C81FD2E6-508D-4546-8C04-9D6DFEC9446D}" 13 | EndProject 14 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FallGuysMods", "FallGuysMods\FallGuysMods.csproj", "{6F2C5FB4-8A2A-4DB7-9F6C-068342197B56}" 15 | EndProject 16 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FallGuysDumper", "FallGuysDumper\FallGuysDumper.csproj", "{42CF44B5-D371-47A9-8E17-575E3A53D56E}" 17 | EndProject 18 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Il2CppDumper", "..\Il2CppDumper\Il2CppDumper\Il2CppDumper.csproj", "{0F4A75D3-D948-47C9-B8E7-E093381941BD}" 19 | EndProject 20 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpMonoInjector", "..\SharpMonoInjector\src\SharpMonoInjector\SharpMonoInjector.csproj", "{20094E99-F59D-464C-85E9-7B7BAD867A1C}" 21 | EndProject 22 | Global 23 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 24 | Debug|Any CPU = Debug|Any CPU 25 | Debug|x64 = Debug|x64 26 | Release|Any CPU = Release|Any CPU 27 | Release|x64 = Release|x64 28 | EndGlobalSection 29 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 30 | {A35D63AA-87F3-49CF-B80C-A324B53C1115}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 31 | {A35D63AA-87F3-49CF-B80C-A324B53C1115}.Debug|Any CPU.Build.0 = Debug|Any CPU 32 | {A35D63AA-87F3-49CF-B80C-A324B53C1115}.Debug|x64.ActiveCfg = Debug|x64 33 | {A35D63AA-87F3-49CF-B80C-A324B53C1115}.Debug|x64.Build.0 = Debug|x64 34 | {A35D63AA-87F3-49CF-B80C-A324B53C1115}.Release|Any CPU.ActiveCfg = Release|Any CPU 35 | {A35D63AA-87F3-49CF-B80C-A324B53C1115}.Release|Any CPU.Build.0 = Release|Any CPU 36 | {A35D63AA-87F3-49CF-B80C-A324B53C1115}.Release|x64.ActiveCfg = Release|Any CPU 37 | {A35D63AA-87F3-49CF-B80C-A324B53C1115}.Release|x64.Build.0 = Release|Any CPU 38 | {A8B617A1-C2FA-4FAD-883F-8E5A49E80099}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 39 | {A8B617A1-C2FA-4FAD-883F-8E5A49E80099}.Debug|Any CPU.Build.0 = Debug|Any CPU 40 | {A8B617A1-C2FA-4FAD-883F-8E5A49E80099}.Debug|x64.ActiveCfg = Debug|Any CPU 41 | {A8B617A1-C2FA-4FAD-883F-8E5A49E80099}.Debug|x64.Build.0 = Debug|Any CPU 42 | {A8B617A1-C2FA-4FAD-883F-8E5A49E80099}.Release|Any CPU.ActiveCfg = Release|Any CPU 43 | {A8B617A1-C2FA-4FAD-883F-8E5A49E80099}.Release|Any CPU.Build.0 = Release|Any CPU 44 | {A8B617A1-C2FA-4FAD-883F-8E5A49E80099}.Release|x64.ActiveCfg = Release|Any CPU 45 | {A8B617A1-C2FA-4FAD-883F-8E5A49E80099}.Release|x64.Build.0 = Release|Any CPU 46 | {E3C6839D-7A27-481A-ABB9-D03D8DBD73A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 47 | {E3C6839D-7A27-481A-ABB9-D03D8DBD73A8}.Debug|Any CPU.Build.0 = Debug|Any CPU 48 | {E3C6839D-7A27-481A-ABB9-D03D8DBD73A8}.Debug|x64.ActiveCfg = Debug|Any CPU 49 | {E3C6839D-7A27-481A-ABB9-D03D8DBD73A8}.Debug|x64.Build.0 = Debug|Any CPU 50 | {E3C6839D-7A27-481A-ABB9-D03D8DBD73A8}.Release|Any CPU.ActiveCfg = Release|Any CPU 51 | {E3C6839D-7A27-481A-ABB9-D03D8DBD73A8}.Release|Any CPU.Build.0 = Release|Any CPU 52 | {E3C6839D-7A27-481A-ABB9-D03D8DBD73A8}.Release|x64.ActiveCfg = Release|Any CPU 53 | {E3C6839D-7A27-481A-ABB9-D03D8DBD73A8}.Release|x64.Build.0 = Release|Any CPU 54 | {C81FD2E6-508D-4546-8C04-9D6DFEC9446D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 55 | {C81FD2E6-508D-4546-8C04-9D6DFEC9446D}.Debug|Any CPU.Build.0 = Debug|Any CPU 56 | {C81FD2E6-508D-4546-8C04-9D6DFEC9446D}.Debug|x64.ActiveCfg = Debug|Any CPU 57 | {C81FD2E6-508D-4546-8C04-9D6DFEC9446D}.Debug|x64.Build.0 = Debug|Any CPU 58 | {C81FD2E6-508D-4546-8C04-9D6DFEC9446D}.Release|Any CPU.ActiveCfg = Release|Any CPU 59 | {C81FD2E6-508D-4546-8C04-9D6DFEC9446D}.Release|Any CPU.Build.0 = Release|Any CPU 60 | {C81FD2E6-508D-4546-8C04-9D6DFEC9446D}.Release|x64.ActiveCfg = Release|Any CPU 61 | {C81FD2E6-508D-4546-8C04-9D6DFEC9446D}.Release|x64.Build.0 = Release|Any CPU 62 | {6F2C5FB4-8A2A-4DB7-9F6C-068342197B56}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 63 | {6F2C5FB4-8A2A-4DB7-9F6C-068342197B56}.Debug|Any CPU.Build.0 = Debug|Any CPU 64 | {6F2C5FB4-8A2A-4DB7-9F6C-068342197B56}.Debug|x64.ActiveCfg = Debug|x64 65 | {6F2C5FB4-8A2A-4DB7-9F6C-068342197B56}.Debug|x64.Build.0 = Debug|x64 66 | {6F2C5FB4-8A2A-4DB7-9F6C-068342197B56}.Release|Any CPU.ActiveCfg = Release|Any CPU 67 | {6F2C5FB4-8A2A-4DB7-9F6C-068342197B56}.Release|Any CPU.Build.0 = Release|Any CPU 68 | {6F2C5FB4-8A2A-4DB7-9F6C-068342197B56}.Release|x64.ActiveCfg = Release|Any CPU 69 | {6F2C5FB4-8A2A-4DB7-9F6C-068342197B56}.Release|x64.Build.0 = Release|Any CPU 70 | {42CF44B5-D371-47A9-8E17-575E3A53D56E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 71 | {42CF44B5-D371-47A9-8E17-575E3A53D56E}.Debug|Any CPU.Build.0 = Debug|Any CPU 72 | {42CF44B5-D371-47A9-8E17-575E3A53D56E}.Debug|x64.ActiveCfg = Debug|x64 73 | {42CF44B5-D371-47A9-8E17-575E3A53D56E}.Debug|x64.Build.0 = Debug|x64 74 | {42CF44B5-D371-47A9-8E17-575E3A53D56E}.Release|Any CPU.ActiveCfg = Release|Any CPU 75 | {42CF44B5-D371-47A9-8E17-575E3A53D56E}.Release|Any CPU.Build.0 = Release|Any CPU 76 | {42CF44B5-D371-47A9-8E17-575E3A53D56E}.Release|x64.ActiveCfg = Release|Any CPU 77 | {42CF44B5-D371-47A9-8E17-575E3A53D56E}.Release|x64.Build.0 = Release|Any CPU 78 | {0F4A75D3-D948-47C9-B8E7-E093381941BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 79 | {0F4A75D3-D948-47C9-B8E7-E093381941BD}.Debug|Any CPU.Build.0 = Debug|Any CPU 80 | {0F4A75D3-D948-47C9-B8E7-E093381941BD}.Debug|x64.ActiveCfg = Debug|Any CPU 81 | {0F4A75D3-D948-47C9-B8E7-E093381941BD}.Debug|x64.Build.0 = Debug|Any CPU 82 | {0F4A75D3-D948-47C9-B8E7-E093381941BD}.Release|Any CPU.ActiveCfg = Release|Any CPU 83 | {0F4A75D3-D948-47C9-B8E7-E093381941BD}.Release|Any CPU.Build.0 = Release|Any CPU 84 | {0F4A75D3-D948-47C9-B8E7-E093381941BD}.Release|x64.ActiveCfg = Release|Any CPU 85 | {0F4A75D3-D948-47C9-B8E7-E093381941BD}.Release|x64.Build.0 = Release|Any CPU 86 | {20094E99-F59D-464C-85E9-7B7BAD867A1C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 87 | {20094E99-F59D-464C-85E9-7B7BAD867A1C}.Debug|Any CPU.Build.0 = Debug|Any CPU 88 | {20094E99-F59D-464C-85E9-7B7BAD867A1C}.Debug|x64.ActiveCfg = Debug|x64 89 | {20094E99-F59D-464C-85E9-7B7BAD867A1C}.Debug|x64.Build.0 = Debug|x64 90 | {20094E99-F59D-464C-85E9-7B7BAD867A1C}.Release|Any CPU.ActiveCfg = Release|Any CPU 91 | {20094E99-F59D-464C-85E9-7B7BAD867A1C}.Release|Any CPU.Build.0 = Release|Any CPU 92 | {20094E99-F59D-464C-85E9-7B7BAD867A1C}.Release|x64.ActiveCfg = Release|x64 93 | {20094E99-F59D-464C-85E9-7B7BAD867A1C}.Release|x64.Build.0 = Release|x64 94 | EndGlobalSection 95 | GlobalSection(SolutionProperties) = preSolution 96 | HideSolutionNode = FALSE 97 | EndGlobalSection 98 | GlobalSection(ExtensibilityGlobals) = postSolution 99 | SolutionGuid = {829E148A-9149-4B7C-B73C-29063E0B871E} 100 | EndGlobalSection 101 | EndGlobal 102 | -------------------------------------------------------------------------------- /FallGuysSharp/FallGuysSharp/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /FallGuysSharp/FallGuysSharp/FallGuysSharp.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {A35D63AA-87F3-49CF-B80C-A324B53C1115} 8 | Exe 9 | FallGuysSharp 10 | FallGuysSharp 11 | v4.7.2 12 | 512 13 | true 14 | true 15 | 16 | 17 | AnyCPU 18 | true 19 | full 20 | false 21 | bin\Debug\ 22 | DEBUG;TRACE 23 | prompt 24 | 4 25 | 26 | 27 | AnyCPU 28 | pdbonly 29 | true 30 | bin\Release\ 31 | TRACE 32 | prompt 33 | 4 34 | 35 | 36 | true 37 | bin\x64\Debug\ 38 | DEBUG;TRACE 39 | full 40 | x64 41 | 7.3 42 | prompt 43 | MinimumRecommendedRules.ruleset 44 | true 45 | 46 | 47 | bin\x64\Release\ 48 | TRACE 49 | true 50 | pdbonly 51 | x64 52 | 7.3 53 | prompt 54 | MinimumRecommendedRules.ruleset 55 | true 56 | 57 | 58 | 59 | ..\packages\Mono.Cecil.0.11.2\lib\net40\Mono.Cecil.dll 60 | 61 | 62 | ..\packages\Mono.Cecil.0.11.2\lib\net40\Mono.Cecil.Mdb.dll 63 | 64 | 65 | ..\packages\Mono.Cecil.0.11.2\lib\net40\Mono.Cecil.Pdb.dll 66 | 67 | 68 | ..\packages\Mono.Cecil.0.11.2\lib\net40\Mono.Cecil.Rocks.dll 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | {20094e99-f59d-464c-85e9-7b7bad867a1c} 90 | SharpMonoInjector 91 | 92 | 93 | {6f2c5fb4-8a2a-4db7-9f6c-068342197b56} 94 | FallGuysMods 95 | 96 | 97 | 98 | 99 | PreserveNewest 100 | 101 | 102 | PreserveNewest 103 | 104 | 105 | PreserveNewest 106 | 107 | 108 | PreserveNewest 109 | 110 | 111 | 112 | -------------------------------------------------------------------------------- /FallGuysSharp/FallGuysSharp/Managed/System.Core.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shalzuth/FallGuysSharp/ae446fd9580b01eec7acc6c8b0cd5a2d79345abc/FallGuysSharp/FallGuysSharp/Managed/System.Core.dll -------------------------------------------------------------------------------- /FallGuysSharp/FallGuysSharp/Managed/System.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shalzuth/FallGuysSharp/ae446fd9580b01eec7acc6c8b0cd5a2d79345abc/FallGuysSharp/FallGuysSharp/Managed/System.dll -------------------------------------------------------------------------------- /FallGuysSharp/FallGuysSharp/Managed/mscorlib.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shalzuth/FallGuysSharp/ae446fd9580b01eec7acc6c8b0cd5a2d79345abc/FallGuysSharp/FallGuysSharp/Managed/mscorlib.dll -------------------------------------------------------------------------------- /FallGuysSharp/FallGuysSharp/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.IO; 4 | using System.Linq; 5 | using System.Net; 6 | using SharpMonoInjector; 7 | using System.IO.Compression; 8 | using System.Reflection; 9 | using Mono.Cecil; 10 | 11 | namespace FallGuysSharp 12 | { 13 | class Program 14 | { 15 | static void Main(string[] args) 16 | { 17 | var monoInjector = new Injector("FallGuys_client"); 18 | 19 | var dll = AssemblyDefinition.ReadAssembly("FallGuysMods.dll"); 20 | var rand = Guid.NewGuid().ToString().Replace("-", ""); 21 | dll.Name.Name += rand; 22 | dll.MainModule.Name += rand; 23 | dll.MainModule.Types.ToList().ForEach(t => t.Namespace += rand); 24 | var dllBytes = new Byte[0]; 25 | using (var newDll = new MemoryStream()) 26 | { 27 | dll.Write(newDll); 28 | dllBytes = newDll.ToArray(); 29 | } 30 | monoInjector.Inject(dllBytes, dll.Name.Name, "Init", "Setup"); 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /FallGuysSharp/FallGuysSharp/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("FallGuysSharp")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("FallGuysSharp")] 13 | [assembly: AssemblyCopyright("Copyright © shalzuth 2020")] 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("a35d63aa-87f3-49cf-b80c-a324b53c1115")] 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 | -------------------------------------------------------------------------------- /FallGuysSharp/FallGuysSharp/mono/mono-2.0-bdwgc.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shalzuth/FallGuysSharp/ae446fd9580b01eec7acc6c8b0cd5a2d79345abc/FallGuysSharp/FallGuysSharp/mono/mono-2.0-bdwgc.dll -------------------------------------------------------------------------------- /FallGuysSharp/FallGuysSharp/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 shalzuth 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Fall Guys Sharp 2 | A tool that adds easy mode to Fall Guys. 3 | 4 | This project shows how to inject Unity modules during runtime into il2cpp Unity games. 5 | 6 | ## Features 7 | - WinRace - teleports to the finish line on applicable stages 8 | ![Win Race](demo/winrace.gif) 9 | - Freeze Position - freezes current position to prevent falling 10 | ![Freeze Position](demo/freezepos.gif) 11 | - LevelHelper - removes fake doors/tiles 12 | ![Level Helper](demo/levelhelper.gif) 13 | 14 | ## Todo / current issues 15 | - Occasionally crashes on injection 16 | - Deployment / packaging requries lots of DLL's, would be nice to have a single exe. Fody doesn't work as is. 17 | - Dumper needs to be manually run on game update 18 | - Most of the logic of Gunfire Reborn is done outside of Unity in a native dll / python. 19 | - App that does the injection is just a simple winform - need to clean this up. 20 | 21 | ## Credits 22 | https://github.com/Perfare/Il2CppDumper - dumps out dummy DLLs from Unity il2cpp game 23 | 24 | https://github.com/knah/Il2CppAssemblyUnhollower - converts dummy DLLs from Il2CppDumper into native calls. knah also helped me debug along the way 25 | 26 | https://github.com/warbler/SharpMonoInjector - calls mono functions after mono is loaded (forked to inject Mono) 27 | 28 | -------------------------------------------------------------------------------- /demo/freezepos.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shalzuth/FallGuysSharp/ae446fd9580b01eec7acc6c8b0cd5a2d79345abc/demo/freezepos.gif -------------------------------------------------------------------------------- /demo/levelhelper.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shalzuth/FallGuysSharp/ae446fd9580b01eec7acc6c8b0cd5a2d79345abc/demo/levelhelper.gif -------------------------------------------------------------------------------- /demo/winrace.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shalzuth/FallGuysSharp/ae446fd9580b01eec7acc6c8b0cd5a2d79345abc/demo/winrace.gif --------------------------------------------------------------------------------