This general guide is targeted towards installers and users of the Insane mod created by Discookie. I broke it up into smaller sections, listed in the Table of Contents.
While the Installation's write-up is pretty straightforward, the end of Modding, and the Technical background are much more complex.
So, enough rambling, let's get started!
The Insane mod was originally created with the goal of making maps harder while keeping them 100%-able. Since then I have extended the list of features quite a bit:
While I'm focusing more on custom maps, I still plan to include new features in Insane. Some of these upcoming features:
There are 2 separate releases: Stable, and Dev. My reasoning for this, is that I don't have a VIVE. I'm developing these versions blindly, but if you'd like to help me test those, feel free to download the Dev branch!
Don't forget to give me feedback when you do get around to test these!
Important - If you want to keep your difficulty rating up-to-date on the how-to-play screen, do both steps!
This section only applies to the Stable branch!
Now that it's out of the way, there are several ways you can alter the difficulty, here in recommended order of priority:
Further modifications coming soon!
As I spent countless hours watching Audioshield streams, I noticed something: no matter how hard streamers try, or how high the min note spacing is, they cannot 100% fast maps. At first I thought this was due to them not being good enough, but then, as I started to look into modding, I had the idea to make a quick Excel chart:1 unit ≈ 1 meter
Do you notice anything?
Now, if you look real closely (or click on the image to enlarge it), you'll see that there are a few impossible notes, where, even if you saw the notes and reacted in time, you still had no chance to hit them.
To put this into perspective, here is a logarithmic plot of the same values:
This is pretty damn fast.
Limit the note distance.
This creates a lot of questions, the most important is how you limit it.
Limit x=x⁄t0: Audioshield's current solution to this problem is to limit the maximum distance between notes to a constant, independent on note timing. This works great if your notespacing is large, but fails pretty hard when you play with the notespacing of the 2 mods listed in the Links section.
Limit v=x⁄t1: The other approach is to limit the note distance based on time. This is what should have been done in the first place, instead of Audioshield's approach, for the base mods. This doesn't leave much room for difficulty based on these values, so I went a step further from that.
Limit a=x⁄t2: What I went with in the end is limiting the acceleration of your hand. This is the natural limit of your hands, since acceleration takes most of the energy of moving them. The downside is streams - notes in extremely quick succession. They will be made too easy.
In the end, I went with the simple equation for calculating note distance: r·t2
r is random (more later), t is time between notes
My other, more realistic option would have been 2r·(t/2)2, but that's basically unnecessary effort, because all the lost value can be counterweighed by 2r2=r1.
Now, onto the more interesting part: the random.
With the default random generator, you would have a linear scaling for note distance - great for casual players, not-so-great for an acceleration-focused mod. So to battle this, I basically went ahead and created a weighted random generator.
The algorithm for that is: m·r f+n
n is minimum, m is maximum, f is factor, r is a random number
This has a few caveats: you need to give it a positive random (otherwise you wouldn't have a real solution), and if n≠0, you would have cases where there are no possible solutions within the gameplay bounds. The value itself is there, and intengrated, but changing it currently breaks the generator algorithm.
Aside from that, this algorithm is great for dynamically limiting a) the maximum acceleration, and b) the average acceleration. Because f isn't dependent on m, you can tire yourself out, while making it still 100%-able for yourself. It is better than the previous approach, because it is biased towards notes being further apart, thus making them harder to hit. f=1 gives you the linear scaling back, while f=0.5 gives quadratic scaling - constant acceleration.
Double notes were interesting: They posed a challenge, because the current system is built around symmetrical doubles - not good for limiting! I did not solve this problem (the only way to solve is to implement non-centered doubles), but I made it more bearable by letting the game flip doubles.
And the result:
Note: The acceleration's average should be somewhere around 4.3 - it isn't, because of the way I created notes.
The Excel sheet is available here.
Audioshield - the game this mod is meant for, and whose devs were taught by Papyrus to write code
Even Harder and Expert mods - inspiration, and base for my mod
Ruirize - for alpha testing and inspiration