README

Introduction

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!

Table of Contents

  1. Introduction
  2. Table of Contents
  3. Description
  4. Installation
  5. Difficulty and other modifications
  6. Technical background
  7. Links and acknowledgements

Description and Features

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!

Installation

For the Stable branch:

  1. Download the file.
  2. Open it with 7-zip or equivalent.
  3. Backup the folder you're abot to extract to!
    (otherwise you'll lose your current mod)
  4. Extract it to one of your mod folders.
    something like "(steam game dir.)/Audioshield/mods/Hard ShieldVR"
    preferably into Hard ShieldVR
  5. Test your stuff! You'll see the different How To Play screen if you installed correctly.
  6. If the mod's too hard, see the next section!
  7. If you're still pondering the meaning of life while reading this, check out these important videos.

For the Dev branch:

  1. Download and extract the file.
  2. Read the README included!
  3. Run the file make.bat.
  4. Copy the output folder's contents into your mod folder.
  5. Something's wrong? Create an issue on GitHub, or adjust the settings as described in the included README!

Difficulty and other modifications

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:

  1. The notes are coming too slowfast, I can't move my hands in time!
    => Solution: Modify the maximum acceleration!
    The higher the value, the faster your hands go.

  2. The notes are too dense!
    => Solution: Modify the note spacing!
    The lower the value, the denser the notes.

  3. I'm seeing too many doubles!
    => Solution: Modify the double-notes chance factor!
    The higher the value, the more double-notes.

  4. The notes are too far apart, I can't hit them!
    Note: Scales the difficulty the same way as 1.!
    => Solution: Modify the armspan scale!
    The higher the value, the larger the armspan is, the faster your hands go!
  5. It's fairly slow, but I'm still very tired!
    Note: Shouldn't change this, in most cases changing 1. is better!
    => Solution: Modify the acceleration factor!
    The LOWER the value, the faster the average acceleration is,
      but max acceleration stays the same!

Further modifications coming soon!

Technical background

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.

So how do you battle this?

Limit the note distance.
This creates a lot of questions, the most important is how you limit it.
Limit x=xt0: 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=xt1: 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=xt2: 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.

TLDR: Acceleration limit, weighted random, too much free time...

And the result:

Much better.
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.

Links and acknowledgements

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