GithubHelp home page GithubHelp logo

goobwabber / beatsaberoptimizer Goto Github PK

View Code? Open in Web Editor NEW
9.0 1.0 1.0 51 KB

A Beat Saber mod that optimizes some things to make the game run better on lower performance CPUs

License: MIT License

C# 100.00%

beatsaberoptimizer's Introduction

BeatsaberOptimizer Steam/PC-Only Build

A mod that optimizes some things to make the game run better on lower performance CPUs

Features (More will be added when I notice them)

  • Makes wall maps much less laggy

Installation

  1. Ensure you have the required mods
  2. Download the BeatsaberOptimizer file listed under Assets Here.
    • Optionally, you can get a development build by downloading the file listed under Artifacts Here (pick the topmost successful build).
    • You must be logged into GitHub to download a development build.
  3. Extract the zip file to your Beat Saber game directory (the one Beat Saber.exe is in).
    • The BeatsaberOptimizer.dll (and BeatsaberOptimizer.pdb if it exists) should end up in your Plugins folder (NOT the one in Beat Saber_Data).
  4. Optional: Edit Beat Saber IPA.json (in your UserData folder) and change Debug -> ShowCallSource to true. This will enable BSIPA to get file and line numbers from the PDB file where errors occur, which is very useful when reading the log files. This may have a slight impact on performance.

Requirements

These can be downloaded from BeatMods or using Mod Assistant. Do NOT use any of the DLLs in the Refs folder, they have been stripped of code and will not work.

  • SiraUtil 2.4.0+

Reporting Issues

  • The best way to report issues is to click on the Issues tab at the top of the GitHub page. This allows any contributor to see the problem and attempt to fix it, and others with the same issue can contribute more information. Please try the troubleshooting steps before reporting the issues listed there. Please only report issues after using the latest build, your problem may have already been fixed.
  • Include in your issue:
    • A detailed explanation of your problem (you can also attach videos/screenshots)
    • Important: The log file from the game session the issue occurred (restarting the game creates a new log file).
      • The log file can be found at Beat Saber\Logs\_latest.log (Beat Saber being the folder Beat Saber.exe is in).
  • If you ask for help on Discord, at least include your _latest.log file in your help request.

Contributing

Anyone can feel free to contribute bug fixes or enhancements to BeatsaberOptimizer. GitHub Actions for Pull Requests made from GitHub accounts that don't have direct access to the repository will fail. This is normal because the Action requires a Secret to download dependencies.

Building

Visual Studio 2019 with the BeatSaberModdingTools extension is the recommended development environment.

  1. Check out the repository
  2. Open BeatsaberOptimizer.sln
  3. Right-click the BeatsaberOptimizer project, go to Beat Saber Modding Tools -> Set Beat Saber Directory
    • This assumes you have already set the directory for your Beat Saber game folder in Extensions -> Beat Saber Modding Tools -> Settings...
    • If you do not have the BeatSaberModdingTools extension, you will need to manually create a BeatsaberOptimizer.csproj.user file to set the location of your game install. An example is showing below.
  4. The project should now build.

Example csproj.user File:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <BeatSaberDir>Full\Path\To\Beat Saber</BeatSaberDir>
  </PropertyGroup>
</Project>

Donate

You can support development of BeatsaberOptimizer by donating at the following links:

beatsaberoptimizer's People

Contributors

goobwabber avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Forkers

erisapps

beatsaberoptimizer's Issues

[BUG] Issues with multiplayer, Null Reference

Beatsaber Optimizer Version and Download Source
v0.1.0 and I'm pretty sure at some point it was posted in #PC-Mods on the BSMG discord, but I can't find it there so either I'm losing it or that is where I found it but it was removed.

Your Platform
PC Steam V1.16.1 & 1.16.2 (it was happening on both.)

Describe the bug
Causes multiplayer to hang on song start/song load

To Reproduce

  1. Go to 'Multiplayer/Online'.
  2. Host or join a lobby.
  3. Select a song and click play.
  4. Game gets stuck at a black screen.

Expected behavior
Load into multiplayer session.

Log

[DEBUG @ 12:50:02 | SiraUtil] Installing: OptimizationInstaller (BeatsaberOptimizer)
[CRITICAL @ 12:50:02 | UnityEngine] ZenjectException: Unable to resolve 'PlayerTransforms'. Object graph:
[CRITICAL @ 12:50:02 | UnityEngine] Zenject.DiContainer.Resolve (Zenject.InjectContext context) (at <d0da33e76e734eb2a6363882a54b9841>:0)
[CRITICAL @ 12:50:02 | UnityEngine] Zenject.DiContainer.ResolveId (System.Type contractType, System.Object identifier) (at <d0da33e76e734eb2a6363882a54b9841>:0)
[CRITICAL @ 12:50:02 | UnityEngine] Zenject.DiContainer.Resolve (System.Type contractType) (at <d0da33e76e734eb2a6363882a54b9841>:0)
[CRITICAL @ 12:50:02 | UnityEngine] Zenject.DiContainer.Resolve[TContract] () (at <d0da33e76e734eb2a6363882a54b9841>:0)
[CRITICAL @ 12:50:02 | UnityEngine] BeatsaberOptimizer.Installers.OptimizationInstaller.InstallBindings () (at <deac3f5df545498aa96c2154e21b664b>:0)
[CRITICAL @ 12:50:02 | UnityEngine] Zenject.Context.InstallInstallers (System.Collections.Generic.List`1[T] normalInstallers, System.Collections.Generic.List`1[T] normalInstallerTypes, System.Collections.Generic.List`1[T] scriptableObjectInstallers, System.Collections.Generic.List`1[T] installers, System.Collections.Generic.List`1[T] installerPrefabs) (at <d0da33e76e734eb2a6363882a54b9841>:0)
[CRITICAL @ 12:50:02 | UnityEngine] (wrapper dynamic-method) Zenject.Context.Zenject.Context.InstallInstallers_Patch2(Zenject.Context)
[CRITICAL @ 12:50:02 | UnityEngine] (wrapper dynamic-method) Zenject.SceneContext.Zenject.SceneContext.InstallBindings_Patch1(Zenject.SceneContext,System.Collections.Generic.List`1<UnityEngine.MonoBehaviour>)
[CRITICAL @ 12:50:02 | UnityEngine] Zenject.SceneContext.Install () (at <d0da33e76e734eb2a6363882a54b9841>:0)
[CRITICAL @ 12:50:02 | UnityEngine] Zenject.SceneContext.RunInternal () (at <d0da33e76e734eb2a6363882a54b9841>:0)
[CRITICAL @ 12:50:02 | UnityEngine] Zenject.RunnableContext.Run () (at <d0da33e76e734eb2a6363882a54b9841>:0)
[CRITICAL @ 12:50:02 | UnityEngine] Zenject.RunnableContext.Initialize () (at <d0da33e76e734eb2a6363882a54b9841>:0)
[CRITICAL @ 12:50:02 | UnityEngine] Zenject.SceneContext.Awake () (at <d0da33e76e734eb2a6363882a54b9841>:0)
[CRITICAL @ 12:50:02 | UnityEngine] UnityEngine.GameObject:SetActive(Boolean)
[CRITICAL @ 12:50:02 | UnityEngine] UnityScenesHelper:SetActiveRootObjectsInScene(Scene, Boolean)
[CRITICAL @ 12:50:02 | UnityEngine] GameScenesManager:SetActiveRootObjectsInScenes(List`1, Boolean)
[CRITICAL @ 12:50:02 | UnityEngine] <ScenesTransitionCoroutine>d__36:MoveNext()
[CRITICAL @ 12:50:02 | UnityEngine] UnityEngine.SetupCoroutine:InvokeMoveNext(IEnumerator, IntPtr)
[CRITICAL @ 12:50:02 | UnityEngine] NullReferenceException: Object reference not set to an instance of an object
[CRITICAL @ 12:50:02 | UnityEngine] VRRenderingParamsSetup.OnEnable () (at <f466e163166b4073b6dd391947ee7cac>:0)
[CRITICAL @ 12:50:02 | UnityEngine] UnityEngine.GameObject:SetActive(Boolean)
[CRITICAL @ 12:50:02 | UnityEngine] UnityScenesHelper:SetActiveRootObjectsInScene(Scene, Boolean)
[CRITICAL @ 12:50:02 | UnityEngine] GameScenesManager:SetActiveRootObjectsInScenes(List`1, Boolean)
[CRITICAL @ 12:50:02 | UnityEngine] <ScenesTransitionCoroutine>d__36:MoveNext()
[CRITICAL @ 12:50:02 | UnityEngine] UnityEngine.SetupCoroutine:InvokeMoveNext(IEnumerator, IntPtr)
[CRITICAL @ 12:50:02 | UnityEngine] NullReferenceException: Object reference not set to an instance of an object
[CRITICAL @ 12:50:02 | UnityEngine] FadeInOnSceneTransitionFinished.OnEnable () (at <f466e163166b4073b6dd391947ee7cac>:0)
[CRITICAL @ 12:50:02 | UnityEngine] UnityEngine.GameObject:SetActive(Boolean)
[CRITICAL @ 12:50:02 | UnityEngine] UnityScenesHelper:SetActiveRootObjectsInScene(Scene, Boolean)
[CRITICAL @ 12:50:02 | UnityEngine] GameScenesManager:SetActiveRootObjectsInScenes(List`1, Boolean)
[CRITICAL @ 12:50:02 | UnityEngine] <ScenesTransitionCoroutine>d__36:MoveNext()
[CRITICAL @ 12:50:02 | UnityEngine] UnityEngine.SetupCoroutine:InvokeMoveNext(IEnumerator, IntPtr)
[INFO @ 12:50:02 | Custom Avatars] [PlayerAvatarManager] Player height set to 1.684758 m
[INFO @ 12:50:02 | Custom Avatars] [SpawnedAvatar(Lumine)] Avatar resized with scale: 1.580503
[CRITICAL @ 12:50:02 | UnityEngine] NullReferenceException: Object reference not set to an instance of an object
[CRITICAL @ 12:50:02 | UnityEngine] MultiplayerConditionalActiveByLayout.Start () (at <ed5f1dff68954975944aebd4c110b7aa>:0)

Additional context
I went through multiple logs carefully to determine at what point the game was throwing a NullReferenceException to try and determine which mod/mods were causing it, disabled/removed several till i noticed the following part of the log above. after which once it gets to NullReferenceException it starts to just loop like that listing different parts of the multiplayer layout until the game is closed.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.