public override void OnApplicationStart() { MelonPrefs.RegisterCategory(SettingsCategory, "Sparkle Be Gone"); MelonPrefs.RegisterBool(SettingsCategory, StartSparkleSetting, false, "Show start sparkle"); MelonPrefs.RegisterBool(SettingsCategory, EndSparksSetting, false, "Show end sparks"); MelonPrefs.RegisterBool(SettingsCategory, EndFlareSetting, true, "Show end flare"); MelonPrefs.RegisterBool(SettingsCategory, RecolorSparksSetting, false, "Recolor sparks"); MelonPrefs.RegisterBool(SettingsCategory, RecolorBeamsSetting, true, "Recolor beams"); MelonPrefs.RegisterString(SettingsCategory, BeamColorSetting, "25 50 255 255", "Beam color (r g b a)"); var method = typeof(VRCSpaceUiPointer).GetMethod(nameof(VRCSpaceUiPointer.LateUpdate), BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); { using var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("SparkleBeGone.sparklebegone"); using var memStream = new MemoryStream((int)stream.Length); stream.CopyTo(memStream); var bundle = AssetBundle.LoadFromMemory_Internal(memStream.ToArray(), 0); myWhiteLaserTexture = bundle.LoadAsset_Internal("Assets/SparkleBeGone/sniper_beam_white.png", Il2CppType.Of <Texture2D>()).Cast <Texture2D>(); myWhiteLaserTexture.hideFlags |= HideFlags.DontUnloadUnusedAsset; } unsafe { var originalPointer = *(IntPtr *)(IntPtr)UnhollowerUtils.GetIl2CppMethodInfoPointerFieldForGeneratedMethod(method).GetValue(null); CompatHook((IntPtr)(&originalPointer), typeof(SparkleBeGoneMod).GetMethod(nameof(CursorLateUpdatePatch), BindingFlags.Static | BindingFlags.NonPublic) !.MethodHandle.GetFunctionPointer()); ourOriginalLateUpdate = Marshal.GetDelegateForFunctionPointer <VoidDelegate>(originalPointer); } MelonCoroutines.Start(InitThings()); }
public override void OnApplicationStart() { MelonPrefs.RegisterCategory(ModCategory, "Mirror Resolution"); MelonPrefs.RegisterInt(ModCategory, MaxResPref, 4096, "Max eye texture size"); MelonPrefs.RegisterInt(ModCategory, MirrorMsaaPref, 0, "Mirror MSAA (0=default)"); MelonPrefs.RegisterBool(ModCategory, AllMirrorsAutoPref, false, "Force auto resolution"); unsafe { var methodInfo = Il2CppType.Of <VRC_MirrorReflection>().GetMethod(nameof(VRC_MirrorReflection.GetReflectionData), BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); var originalMethodPointer = *(IntPtr *)IL2CPP.il2cpp_method_get_from_reflection(methodInfo.Pointer); CompatHook((IntPtr)(&originalMethodPointer), typeof(MirrorResolutionUnlimiterMod).GetMethod(nameof(GetReflectionData), System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic) !.MethodHandle.GetFunctionPointer()); } OnModSettingsApplied(); if (AppDomain.CurrentDomain.GetAssemblies().Any(it => it.GetName().Name.StartsWith("UIExpansionKit"))) { MelonLogger.Log("Adding UIExpansionKit buttons"); typeof(UiExtensionsAddon) .GetMethod(nameof(UiExtensionsAddon.Init), System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static) ! .Invoke(null, new object[0]); } }
public override void OnApplicationStart() { MelonPrefs.RegisterCategory(SettingsCategory, SettingsCategory); MelonPrefs.RegisterBool(SettingsCategory, EnabledSetting, true, "FP fix enabled"); OnModSettingsApplied(); }
public override void OnApplicationStart() { MelonPrefs.RegisterCategory(ModCategory, "Game Priority"); MelonPrefs.RegisterBool(ModCategory, setGamePriority, false, "Set game priority to High"); ApplyChanges(); }
public static void RegisterSettings() { MelonPrefs.RegisterCategory(SettingsCategory, "Join Notifier"); MelonPrefs.RegisterBool(SettingsCategory, SettingShouldBlink, true, "Blink HUD icon on join"); MelonPrefs.RegisterBool(SettingsCategory, SettingShouldPlaySound, true, "Play sound on join"); MelonPrefs.RegisterBool(SettingsCategory, SettingJoinShowName, true, "Show joined names"); MelonPrefs.RegisterBool(SettingsCategory, SettingLeaveBlink, false, "Blink HUD icon on leave"); MelonPrefs.RegisterBool(SettingsCategory, SettingLeaveSound, false, "Play sound on leave"); MelonPrefs.RegisterBool(SettingsCategory, SettingLeaveShowName, false, "Show left names"); MelonPrefs.RegisterFloat(SettingsCategory, SettingSoundVolume, .3f, "Sound volume (0-1)"); MelonPrefs.RegisterBool(SettingsCategory, SettingUseUiMixer, true, "Notifications are affected by UI volume slider"); MelonPrefs.RegisterInt(SettingsCategory, SettingTextSize, 36, "Text size (pt)"); MelonPrefs.RegisterBool(SettingsCategory, SettingNotifyPublic, false, "Notify in public instances"); MelonPrefs.RegisterBool(SettingsCategory, SettingNotifyFriends, true, "Notify in friends[+] instances"); MelonPrefs.RegisterBool(SettingsCategory, SettingNotifyPrivate, true, "Notify in private instances"); MelonPrefs.RegisterBool(SettingsCategory, SettingShowFriendsOnly, false, "Show friend join/leave only"); MelonPrefs.RegisterString(SettingsCategory, SettingJoinIconColor, "127 191 255", "Join icon color (r g b)"); MelonPrefs.RegisterString(SettingsCategory, SettingLeaveIconColor, "153 82 51", "Leave icon color (r g b)"); MelonPrefs.RegisterBool(SettingsCategory, SettingShowFriendsInDifferentColor, true, "Show friend names in different color"); MelonPrefs.RegisterString(SettingsCategory, SettingFriendsJoinColor, "224 224 0", "Friend join name color (r g b)"); MelonPrefs.RegisterString(SettingsCategory, SettingFriendsLeaveColor, "201 201 0", "Friend leave name color (r g b)"); }
public static void RegisterConfig() { MelonPrefs.RegisterBool(Category, nameof(HiddenClouds), true, "Hide nebula clouds inside the approach circle"); MelonPrefs.RegisterBool(Category, nameof(HiddenDarts), true, "Hide note darts"); MelonPrefs.RegisterBool(Category, nameof(CleanStacks), false, "Hide clouds for stacked notes for better readability. This will override hidden clouds."); OnModSettingsApplied(); }
private void HandleConfig() { MelonPrefs.RegisterCategory("Settings", "Settings"); Debug.Msg("Create Category: Settings", 2); MelonPrefs.RegisterBool("Settings", "HotkeysEnabled", true, "Hotkeys Enabled"); Debug.Msg("Create Entry: HotkeysEnabled", 2); MelonPrefs.RegisterBool("Settings", "DebugEnabled", true, "Debug Enabled"); Debug.Msg("Create Entry: DebugEnabled", 2); MelonPrefs.RegisterBool("Settings", "DebugM1Enabled", true, "Debug M1 Enabled"); Debug.Msg("Create Entry: Debug1Enabled", 2); MelonPrefs.RegisterBool("Settings", "DebugM2Enabled", true, "Debug M2 Enabled"); Debug.Msg("Create Entry: Debug2Enabled", 2); MelonPrefs.RegisterBool("Settings", "DebugM3Enabled", false, "Debug M3 Enabled"); Debug.Msg("Create Entry: Debug3Enabled", 2); CheatToggles.enableHotkeys = MelonPrefs.GetBool("Settings", "HotkeysEnabled"); CheatToggles.enableDebug = MelonPrefs.GetBool("Settings", "DebugEnabled"); Debug.debugMode1 = MelonPrefs.GetBool("Settings", "DebugM1Enabled"); Debug.debugMode2 = MelonPrefs.GetBool("Settings", "DebugM2Enabled"); Debug.debugMode3 = MelonPrefs.GetBool("Settings", "DebugM3Enabled"); MelonPrefs.SaveConfig(); }
public override void OnApplicationStart() { MelonPrefs.RegisterCategory("FPSUnlocker Config", "FPSUnlocker Config"); MelonPrefs.RegisterInt("FPSUnlocker Config", "maxFps", 60, "Max FPS"); MelonPrefs.RegisterBool("FPSUnlocker Config", "vSync", false, "Enable/Disable vSync"); OnModSettingsApplied(); }
public static void RegisterConfig() { MelonPrefs.RegisterBool(Category, nameof(Enabled), true, "Enables the mod."); MelonPrefs.RegisterFloat(Category, nameof(TimingAssistAmount), 1.0f, "Limits the timing window [0,1,0.05,1] {P}"); OnModSettingsApplied(); }
public override void OnApplicationStart() { ClassInjector.RegisterTypeInIl2Cpp <CustomParticleSettingsUiHandler>(); MelonPrefs.RegisterCategory(SettingsCategory, "Particle and DynBone limits"); MelonPrefs.RegisterBool(SettingsCategory, "dummy", false, "ignore this", true); ExpansionKitApi.RegisterWaitConditionBeforeDecorating(WaitForUixPrefabsAndRegister()); }
internal static void RegisterSettings() { MelonPrefs.RegisterCategory(KitCategory, "UI Expansion Kit"); MelonPrefs.RegisterString(KitCategory, PinnedPrefs, "", hideFromList: true); MelonPrefs.RegisterBool(KitCategory, QmExpandoStartsCollapsed, false, "Quick Menu extra panel starts hidden"); MelonPrefs.RegisterBool(KitCategory, CategoriesStartCollapsed, false, "Settings categories start collapsed"); }
/// <summary> /// Called When The Game Starts /// </summary> public override void OnApplicationStart() { //Register Config Category And Toggle Boolean If Not Present MelonPrefs.RegisterCategory("NoPostProcessing", "NoPostProcessing"); MelonPrefs.RegisterBool("NoPostProcessing", "DisablePostProcessing", true, "Disable Post Processing"); //Set Initial Post Processing State To The One In Config (Or Default: True) DisablePostProcessing = MelonPrefs.GetBool("NoPostProcessing", "DisablePostProcessing"); }
public static void RegisterSettings() { // Register mod settings MelonPrefs.RegisterCategory("AOOverride", "Ambient Occlusion"); MelonPrefs.RegisterBool("AOOverride", nameof(EnableAO), true, "Enable AO"); MelonPrefs.RegisterFloat("AOOverride", nameof(AOIntensity), 1f, "AO intensity"); LoadSettings(); }
public static void RegisterConfig() { MelonPrefs.RegisterBool(Category, nameof(ShowModifiers), true, "Display active modifiers during gameplay."); MelonPrefs.RegisterBool(Category, nameof(ShowScore), true, "Display score & streak during gameplay."); MelonPrefs.RegisterBool(Category, nameof(ShowSongInfo), true, "Display song info during gameplay."); MelonPrefs.RegisterFloat(Category, nameof(OverlayScale), 1.4f, "Changes the scale of the overlay"); OnModSettingsApplied(); }
public static void CreateConfig() { MelonPrefs.RegisterBool("FollowCamera", "Activated", true); MelonPrefs.RegisterFloat("FollowCamera", "PositionSmoothing", 0.005f); MelonPrefs.RegisterFloat("FollowCamera", "RotationSmoothing", 0.005f); MelonPrefs.RegisterFloat("FollowCamera", "CamHeight", 1.0f); MelonPrefs.RegisterFloat("FollowCamera", "CamDistance", 5.0f); MelonPrefs.RegisterFloat("FollowCamera", "CamRotation", 0.0f); MelonPrefs.RegisterFloat("FollowCamera", "CamOffset", 5.0f); }
public override void OnApplicationStart() { MelonPrefs.RegisterCategory(CoreLimiterPrefCategory, "Core Limiter"); MelonPrefs.RegisterInt(CoreLimiterPrefCategory, MaxCoresPref, 4, "Maximum cores"); MelonPrefs.RegisterBool(CoreLimiterPrefCategory, SkipHyperThreadsPref, true, "Don't use both threads of a core"); MelonLogger.Log($"[CoreLimiter] Have {Environment.ProcessorCount} processor cores"); ApplyAffinity(); }
public static void RegisterConfig() { MelonPrefs.RegisterBool(Category, nameof(Enabled), true, "Enables the mod."); MelonPrefs.RegisterBool(Category, nameof(KillCPUParticles), true, "Disables a small puff of particles."); MelonPrefs.RegisterInt(Category, nameof(ParticleCount), 0, "Amount of GPU particles per shot. [0,50000,1000,0] {G}"); OnModSettingsApplied(); }
private void HandleConfig() { MelonPrefs.RegisterCategory("Settings", "Settings"); Debug.Msg("Create Category: Settings", 2); MelonPrefs.RegisterBool("Settings", "HotkeysEnabled", true, "Hotkeys Enabled"); Debug.Msg("Create Entry: HotkeysEnabled", 2); CheatToggles.enableHotkeys = MelonPrefs.GetBool("Settings", "HotkeysEnabled"); MelonPrefs.SaveConfig(); }
public static void RegisterConfig() { MelonPrefs.RegisterBool(Category, nameof(highscoreMode), false, "Highscore mode restarts a song once you can't beat your current highscore anymore. Ignores allowed miss count."); MelonPrefs.RegisterBool(Category, nameof(showStats), true, "Shows stats screen after failing a song."); MelonPrefs.RegisterBool(Category, nameof(includeChainSustainBreak), false, "Counts chain and sustain breaks as misses."); MelonPrefs.RegisterInt(Category, nameof(allowedMissCount), 0, "How many misses you are allowed to have before restarting a song.[0, 10, 1, 0]"); MelonPrefs.RegisterBool(Category, nameof(autoSkip), false, "Enables automatic skipping of song intros."); OnModSettingsApplied(); }
public override void OnApplicationStart() { MelonPrefs.RegisterCategory("DirectionalVoice", "Directional Voice"); MelonPrefs.RegisterBool("DirectionalVoice", "Enabled", true, "Directional Voice"); MelonPrefs.RegisterFloat("DirectionalVoice", "MinVolume", 25f, "Minimum volume when behind speaker (percent)"); #if DEBUG MelonPrefs.RegisterString("DirectionalVoice", "DebugTarget", "", "Debug Target"); #endif OnModSettingsApplied(); }
public override void OnApplicationStart() { MelonPrefs.RegisterCategory("AvatarHider", "Avatar Hider"); MelonPrefs.RegisterBool("AvatarHider", "HideAvatars", false, "Hide Avatars"); MelonPrefs.RegisterBool("AvatarHider", "IgnoreFriends", true, "Ignore Friends"); MelonPrefs.RegisterFloat("AvatarHider", "HideDistance", 7f, "Distance (meters)"); OnModSettingsApplied(); MelonCoroutines.Start(AvatarScanner()); }
public static void RegisterSettings() { MelonPrefs.RegisterCategory(CategoryName, "Graphics settings"); MelonPrefs.RegisterInt(CategoryName, MsaaLevel, -1, "MSAA Level (1/2/4/8)"); MelonPrefs.RegisterBool(CategoryName, AllowMsaa, true, "Enable MSAA"); MelonPrefs.RegisterBool(CategoryName, AnisoFilter, true, "Enable anisotropic filtering"); MelonPrefs.RegisterBool(CategoryName, RealtimeShadows, true, "Realtime shadows"); MelonPrefs.RegisterBool(CategoryName, SoftShadows, true, "Soft shadows"); MelonPrefs.RegisterInt(CategoryName, PixelLights, -1, "Max pixel lights"); MelonPrefs.RegisterInt(CategoryName, TextureLimit, -1, "Texture decimation"); MelonPrefs.RegisterInt(CategoryName, GraphicsTier, -1, "Graphics tier (1/2/3)"); }
public override void OnApplicationStart() { MelonPrefs.RegisterCategory("AntiUdonExploits", "Anti Udon Exploits"); MelonPrefs.RegisterBool("AntiUdonExploits", "Enabled", true); MelonPrefs.RegisterBool("AntiUdonExploits", "PublicInstancesOnly", true, "Public Instances Only"); _enabled = MelonPrefs.GetBool("AntiUdonExploits", "Enabled"); _publicInstancesOnly = MelonPrefs.GetBool("AntiUdonExploits", "PublicInstancesOnly"); HarmonyInstance harmony = HarmonyInstance.Create("AntiUdonExploits"); harmony.Patch(typeof(UdonSync).GetMethod(nameof(UdonSync.UdonSyncRunProgramAsRPC)), GetPatch(nameof(Main.UdonSyncPatch))); }
public static void RegisterConfig() { MelonPrefs.RegisterBool(Category, nameof(Enabled), true, "Enables the mod."); MelonPrefs.RegisterBool(Category, nameof(UseHandColors), true, "Use hand colors for chains."); MelonPrefs.RegisterFloat(Category, nameof(RightR), 0.0f, "Chain color.[0.0,1.0,0.0,0.0]"); MelonPrefs.RegisterFloat(Category, nameof(RightG), 0.0f, "Chain color.[0.0,1.0,0.0,0.0]"); MelonPrefs.RegisterFloat(Category, nameof(RightB), 0.0f, "Chain color.[0.0,1.0,0.0,0.0]"); MelonPrefs.RegisterFloat(Category, nameof(LeftR), 0.0f, "Chain color.[0.0,1.0,0.0,0.0]"); MelonPrefs.RegisterFloat(Category, nameof(LeftG), 0.0f, "Chain color.[0.0,1.0,0.0,0.0]"); MelonPrefs.RegisterFloat(Category, nameof(LeftB), 0.0f, "Chain color.[0.0,1.0,0.0,0.0]"); OnModSettingsApplied(); }
public static void RegisterSettings() { MelonPrefs.RegisterCategory(SettingsCategory, "Advanced safety"); MelonPrefs.RegisterBool(SettingsCategory, nameof(AvatarFilteringEnabled), true, "Enable avatar filtering"); MelonPrefs.RegisterBool(SettingsCategory, nameof(IncludeFriends), false, "Friends are affected by avatar filtering"); MelonPrefs.RegisterBool(SettingsCategory, nameof(AbideByShowAvatar), true, "\"Show avatar\" bypasses avatar filtering"); MelonPrefs.RegisterBool(SettingsCategory, nameof(AvatarFilteringOnlyInPublic), false, "Do avatar filtering only in public instances"); MelonPrefs.RegisterBool(SettingsCategory, nameof(IncludeFriendsInHides), false, "Friends are affected by avatar hiding"); MelonPrefs.RegisterBool(SettingsCategory, nameof(HidesAbideByShowAvatar), true, "\"Show avatar\" bypasses avatar hiding"); MelonPrefs.RegisterBool(SettingsCategory, nameof(AllowSpawnSounds), false, "Allow avatar spawn sounds"); MelonPrefs.RegisterBool(SettingsCategory, nameof(AllowGlobalSounds), false, "Allow global sounds on avatars"); MelonPrefs.RegisterInt(SettingsCategory, nameof(MaxAudioSources), 16, "Max audio sources"); MelonPrefs.RegisterInt(SettingsCategory, nameof(MaxPolygons), 2_000_000, "Max polygons"); MelonPrefs.RegisterInt(SettingsCategory, nameof(MaxMaterialSlots), 100, "Max material slots"); MelonPrefs.RegisterBool(SettingsCategory, nameof(HeuristicallyRemoveScreenSpaceBullshit), true, "Try to remove fullscreen effects"); MelonPrefs.RegisterInt(SettingsCategory, nameof(MaxConstraints), 200, "Max constraints"); MelonPrefs.RegisterInt(SettingsCategory, nameof(MaxColliders), 32, "Max colliders"); MelonPrefs.RegisterInt(SettingsCategory, nameof(MaxRigidBodies), 32, "Max rigidbodies"); MelonPrefs.RegisterInt(SettingsCategory, nameof(MaxClothVertices), 10_000, "Max cloth vertices"); MelonPrefs.RegisterInt(SettingsCategory, nameof(MaxTransforms), 1000, "Max bones/transforms"); MelonPrefs.RegisterInt(SettingsCategory, nameof(MaxDepth), 50, "Max transforms depth"); MelonPrefs.RegisterInt(SettingsCategory, nameof(MaxAnimators), 64, "Max animators"); MelonPrefs.RegisterInt(SettingsCategory, nameof(MaxLights), 2, "Max lights"); MelonPrefs.RegisterInt(SettingsCategory, nameof(MaxComponents), 4_000, "Max total components"); MelonPrefs.RegisterInt(SettingsCategory, nameof(MaxParticles), 1_000_000, "Max total particles"); MelonPrefs.RegisterInt(SettingsCategory, nameof(MaxMeshParticleVertices), 1_000_000, "Max total mesh particle polygons"); MelonPrefs.RegisterBool(SettingsCategory, nameof(AllowUiLayer), false, "Allow UI layer on avatars"); MelonPrefs.RegisterBool(SettingsCategory, nameof(AllowCustomMixers), false, "Allow custom audio mixers on avatars"); MelonPrefs.RegisterBool(SettingsCategory, nameof(AllowReadingMixers), false, "Allow audio mixers in assetbundles"); MelonPrefs.RegisterInt(SettingsCategory, nameof(MaxMaterialSlotsOverSubmeshCount), 2, "Maximum material slots over submesh count"); MelonPrefs.RegisterBool(SettingsCategory, nameof(HidePortalsFromBlockedUsers), true, "Hide portals from blocked users"); MelonPrefs.RegisterBool(SettingsCategory, nameof(HidePortalsFromNonFriends), false, "Hide portals from non-friends"); MelonPrefs.RegisterBool(SettingsCategory, nameof(HidePortalsCreatedTooClose), true, "Hide portals created too close to local player"); OnModSettingsApplied(); }
public override void OnApplicationStart() { MelonPrefs.RegisterCategory("ComfyVRMenu", "Comfy VR Menu"); MelonPrefs.RegisterBool("ComfyVRMenu", "EnableComfyVRMenu", true, "Enable Comfy VR Menu"); _comfyVRMenu = MelonPrefs.GetBool("ComfyVRMenu", "EnableComfyVRMenu"); var harmony = HarmonyInstance.Create("ComfyVRMenu"); var method = PlaceUiMethod; if (method == null) { MelonLogger.LogError("Couldn't find VRCUiManager PlaceUi method to patch."); return; } harmony.Patch(typeof(VRCUiManager).GetMethod(method.Name), GetPatch(nameof(Main.PlaceUiPatch))); }
internal static void RegisterSettings() { MelonPrefs.RegisterCategory(FavCatCategory, "FavCat"); MelonPrefs.RegisterString(FavCatCategory, DatabasePathSettings, "./UserData", "Database directory path", true); MelonPrefs.RegisterString(FavCatCategory, ImageCacheSettings, "./UserData", "Image cache directory path", true); MelonPrefs.RegisterBool(FavCatCategory, EnableAvatarFavs, true, "Enable avatar favorites (restart required)"); MelonPrefs.RegisterBool(FavCatCategory, EnableWorldFavs, true, "Enable world favorites (restart required)"); MelonPrefs.RegisterBool(FavCatCategory, EnablePlayerFavs, true, "Enable player favorites (restart required)"); MelonPrefs.RegisterString(FavCatCategory, ImageCachingMode, "full", "Image caching mode"); MelonPrefs.RegisterInt(FavCatCategory, ImageCacheMaxSize, 4096, "Image cache max size (MB)"); MelonPrefs.RegisterBool(FavCatCategory, HidePopupAfterFav, true, "Hide favorite popup after (un)favoriting a world or a player"); // shared mode can't be multi-threaded, so hide this until other parts of code are ready for ST patterns MelonPrefs.RegisterBool(FavCatCategory, UseSharedMode, false, "Support multiple VRC instances (slower, restart required)", true); ExpansionKitApi.RegisterSettingAsStringEnum(FavCatCategory, ImageCachingMode, new [] { ("full", "Full local image cache (fastest, safest)"), ("fast", "Fast, use more RAM"), ("builtin", "Preserve RAM, more API requests") });
public override void VRChat_OnUiManagerInit() { MelonLogger.Log("BTK Standalone: Self Portrait - Starting Up"); if (MelonHandler.Mods.Any(x => x.Info.Name.Equals("BTKCompanionLoader", StringComparison.OrdinalIgnoreCase))) { MelonLogger.Log("Hold on a sec! Looks like you've got BTKCompanion installed, this mod is built in and not needed!"); MelonLogger.LogError("BTKSASelfPortrait has not started up! (BTKCompanion Running)"); return; } instance = this; harmony = HarmonyInstance.Create("BTKStandaloneSP"); MelonPrefs.RegisterCategory(settingsCategory, "BTKSA Self Portrait"); MelonPrefs.RegisterFloat(settingsCategory, prefsCameraDistance, 0.7f, "Camera Distance"); MelonPrefs.RegisterInt(settingsCategory, prefsUIAlpha, 70, "UI Display Alpha Percentage"); MelonPrefs.RegisterBool(settingsCategory, prefsUIFlip, true, "Flip Display (Matches mirrors)"); MelonPrefs.RegisterBool(settingsCategory, prefsReflectOtherPlayers, false, "Reflect Other Players"); MelonPrefs.RegisterFloat(settingsCategory, prefsFarClippingDist, 5f, "Camera Cutoff Distance"); ExpansionKitApi.RegisterSimpleMenuButton(ExpandedMenu.QuickMenu, "Toggle Self Portrait", toggleSelfPortrait); //Using FadeTo hook to determine when world is pretty much loaded //Hooking FadeTo for world join late event foreach (MethodInfo method in typeof(VRCUiBackgroundFade).GetMethods(BindingFlags.Public | BindingFlags.Instance)) { if (method.Name.Contains("Method_Public_Void_Single_Action") && !method.Name.Contains("PDM")) { Log($"Found target fadeTo method, patching! ({method.Name})", true); harmony.Patch(method, null, new HarmonyMethod(typeof(BTKSASelfPortrait).GetMethod("OnFade", BindingFlags.Static | BindingFlags.Public))); } } loadAssets(); cameraEye = GameObject.Find("Camera (eye)"); hudContent = GameObject.Find("/UserInterface/UnscaledUI/HudContent"); }
internal static void RegisterSettings() { MelonPrefs.RegisterCategory(IkTweaksCategory, "IK Tweaks"); MelonPrefs.RegisterBool(IkTweaksCategory, FixShoulders, true, "Use Pitch-Yaw Shoulders"); MelonPrefs.RegisterBool(IkTweaksCategory, nameof(IgnoreAnimations), false, "Ignore animations (always slide around)"); MelonPrefs.RegisterBool(IkTweaksCategory, nameof(PlantFeet), false, "Feet stick to ground"); MelonPrefs.RegisterBool(IkTweaksCategory, nameof(FullBodyVrIk), true, "Use custom VRIK for FBT"); MelonPrefs.RegisterBool(IkTweaksCategory, nameof(AddHumanoidPass), true, "Enforce local NetIK (see what others see)"); MelonPrefs.RegisterBool(IkTweaksCategory, nameof(MapToes), false, "Map toes (use if your feet trackers move with your toes)"); MelonPrefs.RegisterBool(IkTweaksCategory, nameof(UseKneeTrackers), false, "Use knee trackers"); MelonPrefs.RegisterBool(IkTweaksCategory, nameof(UseElbowTrackers), false, "Use elbow trackers"); MelonPrefs.RegisterBool(IkTweaksCategory, nameof(UseChestTracker), false, "Use chest tracker"); MelonPrefs.RegisterBool(IkTweaksCategory, nameof(CalibrateFollowHead), true, "Avatar follows head when calibrating (recommended)"); MelonPrefs.RegisterBool(IkTweaksCategory, nameof(CalibrateHalfFreeze), true, "Freeze avatar on one trigger hold in follow head mode"); MelonPrefs.RegisterBool(IkTweaksCategory, nameof(CalibrateUseUniversal), true, "Use universal calibration (requires follow head mode)"); MelonPrefs.RegisterBool(IkTweaksCategory, nameof(CalibrateStorePerAvatar), true, "Store calibration per avatar (when not using universal calibration)"); MelonPrefs.RegisterBool(IkTweaksCategory, nameof(DisableFbt), false, "Disable FBT even if trackers are present"); MelonPrefs.RegisterBool(IkTweaksCategory, nameof(PinHipRotation), true, "Enforce hip rotation match"); MelonPrefs.RegisterBool(IkTweaksCategory, nameof(DoHipShifting), true, "Shift hip pivot (support inverted hip)"); MelonPrefs.RegisterBool(IkTweaksCategory, nameof(PreStraightenSpine), false, "Pre-straighten spine (improve IK stability)"); MelonPrefs.RegisterBool(IkTweaksCategory, nameof(StraightenNeck), true, "Straighten neck"); MelonPrefs.RegisterInt(IkTweaksCategory, nameof(SpineRelaxIterations), 10, "Spine Relax Iterations (max 25)"); MelonPrefs.RegisterFloat(IkTweaksCategory, nameof(MaxSpineAngleFwd), 30, "Max spine angle forward (degrees)"); MelonPrefs.RegisterFloat(IkTweaksCategory, nameof(MaxSpineAngleBack), 30, "Max spine angle back (degrees)"); MelonPrefs.RegisterFloat(IkTweaksCategory, nameof(MaxNeckAngleFwd), 30, "Max neck angle forward (degrees)"); MelonPrefs.RegisterFloat(IkTweaksCategory, nameof(MaxNeckAngleBack), 15, "Max neck angle back (degrees)"); MelonPrefs.RegisterFloat(IkTweaksCategory, nameof(NeckPriority), 2f, "Neck bend priority (1=even with spine, 2=twice as much as spine)"); MelonPrefs.RegisterFloat(IkTweaksCategory, nameof(StraightSpineAngle), 15f, "Straight spine angle (degrees)"); MelonPrefs.RegisterFloat(IkTweaksCategory, nameof(StraightSpinePower), 2, "Straight spine power"); OnSettingsApplied(); }
public unsafe override void OnApplicationStart() { if (!SteamClient.IsValid) { SteamClient.Init(823500); } #if DEBUG MelonModLogger.LogWarning("Debug build!"); #endif MelonLogger.Log($"Multiplayer initialising with protocol version {PROTOCOL_VERSION}."); // Set up prefs MelonPrefs.RegisterCategory("MPMod", "Multiplayer Settings"); MelonPrefs.RegisterBool("MPMod", "BaldFord", false, "90% effective hair removal solution"); // Initialise transport layer TransportLayer = new SteamTransportLayer(); // Create the UI and cache the PlayerRep's model ui = new MultiplayerUI(); client = new Client(ui, TransportLayer); server = new Server(ui, TransportLayer); PlayerRep.LoadFord(); // Configures if the PlayerRep's are showing or hiding certain parts PlayerRep.showBody = true; PlayerRep.showHair = MelonPrefs.GetBool("MPMod", "BaldFord"); // Initialize Discord's RichPresence RichPresence.Initialise(701895326600265879); client.SetupRP(); BWUtil.Hook(); UnhollowerRuntimeLib.ClassInjector.RegisterTypeInIl2Cpp <SyncedObject>(); }