Skip to content

Changing to a non arrow skin

Implementing Non-Arrow Skins in notOSU!

Custom skins like bars, diamonds, or any non-arrow shapes can add a unique flair to your osu!mania storyboard. When using these alternative skins, you won’t need the rotation functionality designed for arrow skins. Here’s how to adapt your storyboard for non-arrow skins.

Preparing Your Skin

First, ensure your custom skin images are placed in the storyboard’s sprites directory. Your skin should consist of the following sprite elements:

  • Notes: The images used for each note in gameplay.
  • Receptors: The images that represent where notes should be hit.
  • Hold Body: The image used for the body of hold notes.

Refer to the sprite setup page for detailed instructions on organizing your sprite files.

Adjusting the Script for Non-Arrow Skins

To accommodate non-arrow skins, you’ll need to disable the rotation for both notes and receptors in the script. This is because non-arrow skins typically don’t require orientation to match gameplay mechanics.

Notes

Within your storyboard script, locate the Note class. In the Render method, you’ll find lines of code that rotate the note sprites based on their column. Remove or comment out the entire switch statement that contains these note.Rotate methods.

Receptors

Similarly, in the Receptor class constructors, you’ll also find receptorSprite.Rotate methods within a switch statement. These lines are responsible for rotating the receptor sprites and should be removed or commented out for non-arrow skins.

Hitlighting

Default notosu uses hit.png and light.png which is also rotate like the receptor to display accurate hitlighting. You will need to bring your own hitlighting textures if you want to adjust this.

Example of Adjusted Note Render Method

Here’s what your Render method in the Note class might look like after removing the rotation:

Remove this code from the functions, since it will not be needed for non arrow skins.

switch (type)
    {
        case ColumnType.one:
        sprite.Rotate(starttime - 1, 1 * Math.PI / 2);
            break;
        case ColumnType.two:
        sprite.Rotate(starttime - 1, 0 * Math.PI / 2);
            break;
        case ColumnType.three:
        sprite.Rotate(starttime - 1, 2 * Math.PI / 2);
            break;
        case ColumnType.four:
        sprite.Rotate(starttime - 1, 3 * Math.PI / 2);
            break;
}
public void Render(double starttime, double endtime, OsbEasing easing, double initialFade, double fadeInTime = 50, double fadeOutTime = 10)
{
    // ... other code ...

    // Rotation has been removed for non-arrow skins
    // No switch statement required

    // ... other code ...
}

Example of Adjusted Receptor Constructor

And here’s an example of a Receptor class constructor without the rotation:

public Receptor(String receptorSpritePath, double rotation, StoryboardLayer layer, CommandScale scale, double starttime, ColumnType type, double delta)
{
    // ... other code ...

    // Rotation has been removed for non-arrow skins
    // No switch statement required

    // ... other code ...
}

After making these changes, your storyboard will use the new non-arrow skins without unnecessary rotations, ensuring that your custom skins display correctly during gameplay.

In the future this step will probably be replaced by a flag, but i suggest on sticking to Arrows for more complex modcharts.

Final Steps

Once you have updated your storyboard script, remember to test the storyboard to ensure that the skins appear as intended and that gameplay is not adversely affected.

For further guidance on sprite setup and storyboard customization, please revisit the Sprite Setup Guide. If you encounter any issues or need additional help, the notOSU! community is a valuable resource for support and advice.