zeph-yr / JDFixer

Allows automated forcing of jump distance (JD) across maps. And now Reaction Time too.
https://www.xephai.com
GNU Affero General Public License v3.0
36 stars 17 forks source link
beatsaber

JDFixer

Was once based on Kylemc1413's NjsFixer but has grown to much more.

I wanted a stripped down mod that focused only on JD modification to fix floaty maps without NJS/BPM modification since I don't use those features. I felt there was a gap between Njsfixer and Leveltweaks that isn't filled for JD-focused players and this is my interpretation for meeting those needs.

Supports CustomCampaigns, Tournament Assistant, all flavors of Multiplayer, OST / DLC / Base Campaign. Score posting is unaffected. For Beat Saber 1.17.1+.

New Features

screenshot screenshot screenshot screenshot screenshot screenshot

How To Use

UI Customization

  1. Linked JD and RT sliders: The JD or RT slider will remember its last value when you click between maps. Scroll to the bottom of JDFixer's tab to swap. This is the default UI (v3.1.0+)
  2. One slider for JD or RT, and a display value for other: Go to Mod Settings and toggle on Unlink JD and RT sliders (for ≤v5.x.x, change legacy_ui_enabled in /UserData/JDFixer.json to "true"). Scroll to the bottom of the JDFixer's tab to swap between JD and RT
  3. Show (or hide) the default and minimum Reaction Times for maps: Go to Mod Settings and toggle on/off Show map Reaction Times (for ≤v5.x.x, change rt_display_enabled in /UserData/JDFixer.json to "false")
  4. TA and MP dedicated UI: Choose to set your map by JD or RT. You can only set one at a time (v4.0.0+)
  5. Min and max ranges for JD and RT sliders can be changed in /UserData/JDFixer.json

Above Left: Show map Reaction Times is ON. Above Right is OFF.

Understanding Preferences Behavior

Suppose your Jump Distance Preferences contain these NJS-JD pairs: 22-18, 21-16, 18-15.

Example 1: Your selected map's NJS is 22 and JD is 20. The map will run at 18 JD because there is an exact match for 22 NJS

Example 2: Your selected map's NJS is 21.5 and JD is 20. The map will run at 16 JD because 21 NJS is the closest lower match.

Example 3: Your selected map's NJS is 21.5 and JD is 14 and Bypass Preferences if map is closer is toggled ON. The map will run at its original 14 JD because it is lower than your matching preference (21-16).

Example 4: Your selected map's NJS is 23 and JD is 20 and your Upper Threshold is set to 23 NJS. The map will run at its original 20 JD because it triggered the threhold.

Example 5: To run every map at a constant JD regardless of its NJS, create a single preference with 0 NJS and your desired JD (e.g. 0 NJS - 18 JD)

Reaction Time Preferences: This works exactly the same as JD Preferences. The five examples above apply, except in Reaction Time. Reaction Time is a function of the map's original NJS and Jump Distance. This means that RT Preferences automatically sets the map's JD to give your preferred RT for its given NJS.

Understanding Snapping to Beat Fractions

To use this feature, toggle on Separate JD and RT sliders, Snap JD and RT to fractions of a beat and set the Beat Fraction (1/n) in Mod Settings. Enabling Automated Preferences overrides the snapped value. The snap display consists of four values (A, B) JD RT.

Given the current JD or RT slider value:

screenshot

Understanding Song Speed Options

By base game behavior, maps maintain their JD when played at different song speeds (e.g. when playing with Modifiers or 200% on Practice Mode). This is so logically, higher song speed settings make maps "play faster" and increases the difficulty by lowering the player's reaction time.

JDFixer can change this. Choose one of the options:

screenshot

Tournaments and MP

screenshot

Versions

About

Copyright © 2021 - 2024 Zephyr | www.xephai.com

This is my first time writing a mod. I made it for my own needs but friends thought it useful so I think it would be beneficial to share it. I hope others find this useful.

Donate and Support

❤️ Love JDFixer and want to show your support? Donate on Patreon or buy a me a ☕ and get your name featured in the Supporters panel in-game!❤️

TYs

Thanks @Shurdoof for autoupdate! Thanks Kyle for the original NjsFixer and thanks to the cool peeps in BSMG for the help and advice when I first started out :)