├── .github
└── workflows
│ └── main.yml
├── .gitignore
├── LICENSE
├── README.rst
├── docs
├── Makefile
├── deploy.py
└── source
│ ├── appendix.rst
│ ├── client.rst
│ ├── conf.py
│ ├── index.rst
│ ├── replays.rst
│ ├── what-is-a-beatmap.rst
│ └── working-with-beatmaps.rst
├── setup.py
└── slider
├── __init__.py
├── __main__.py
├── abc.py
├── beatmap.py
├── bit_enum.py
├── cli.py
├── client.py
├── collection.py
├── curve.py
├── example_data
├── __init__.py
├── beatmaps
│ ├── AKINO from bless4 & CHiCO with HoneyWorks - MIIRO vs. Ai no Scenario (monstrata) [Beginner].osu
│ ├── AKINO from bless4 & CHiCO with HoneyWorks - MIIRO vs. Ai no Scenario (monstrata) [Extra].osu
│ ├── AKINO from bless4 & CHiCO with HoneyWorks - MIIRO vs. Ai no Scenario (monstrata) [Hard].osu
│ ├── AKINO from bless4 & CHiCO with HoneyWorks - MIIRO vs. Ai no Scenario (monstrata) [Kyshiro's Extra].osu
│ ├── AKINO from bless4 & CHiCO with HoneyWorks - MIIRO vs. Ai no Scenario (monstrata) [Nathan's Insane].osu
│ ├── AKINO from bless4 & CHiCO with HoneyWorks - MIIRO vs. Ai no Scenario (monstrata) [Normal].osu
│ ├── AKINO from bless4 & CHiCO with HoneyWorks - MIIRO vs. Ai no Scenario (monstrata) [Sharkie's Insane].osu
│ ├── AKINO from bless4 & CHiCO with HoneyWorks - MIIRO vs. Ai no Scenario (monstrata) [Smoothie World's Extra].osu
│ ├── AKINO from bless4 & CHiCO with HoneyWorks - MIIRO vs. Ai no Scenario (monstrata) [Super Beginner].osu
│ ├── AKINO from bless4 & CHiCO with HoneyWorks - MIIRO vs. Ai no Scenario (monstrata) [Tatoe].osu
│ ├── AKINO from bless4 & CHiCO with HoneyWorks - MIIRO vs. Ai no Scenario (monstrata) [Ultra Beginner].osu
│ ├── AKINO from bless4 & CHiCO with HoneyWorks - MIIRO vs. Ai no Scenario (monstrata) [Walao's Advanced].osu
│ ├── AKINO from bless4 & CHiCO with HoneyWorks - MIIRO vs. Ai no Scenario (monstrata) [Yuistrata's Easy].osu
│ ├── AKINO from bless4 & CHiCO with HoneyWorks - MIIRO vs. Ai no Scenario (monstrata) [ktgster's Insane].osu
│ ├── AKINO from bless4 & CHiCO with HoneyWorks - MIIRO vs. Ai no Scenario (monstrata) [pishi's Extra].osu
│ ├── AKINO from bless4 & CHiCO with HoneyWorks - MIIRO vs. Ai no Scenario (monstrata) [sheela's Very Hard].osu
│ ├── AKINO from bless4 & CHiCO with HoneyWorks - MIIRO vs. Ai no Scenario (monstrata) [toybot's Insane].osu
│ ├── Remo Prototype[CV Hanamori Yumiri] - Sendan Life (Narcissu) [Crystal's Garakowa].osu
│ ├── Remo Prototype[CV Hanamori Yumiri] - Sendan Life (Narcissu) [Easy].osu
│ ├── Remo Prototype[CV Hanamori Yumiri] - Sendan Life (Narcissu) [Extra].osu
│ ├── Remo Prototype[CV Hanamori Yumiri] - Sendan Life (Narcissu) [Little's Hard].osu
│ ├── Remo Prototype[CV Hanamori Yumiri] - Sendan Life (Narcissu) [Little's Insane].osu
│ ├── Remo Prototype[CV Hanamori Yumiri] - Sendan Life (Narcissu) [Normal].osu
│ ├── Sambomaster - Sekai wa Sore wo Ai to Yobunda ze (ZZT the Fifth) [Normal].osu
│ └── __init__.py
└── collections
│ ├── __init__.py
│ └── test.db
├── game_mode.py
├── library.py
├── mod.py
├── position.py
├── replay.py
├── tests
├── __init__.py
├── test_beatmap.py
├── test_collection.py
└── test_utils.py
└── utils.py
/.github/workflows/main.yml:
--------------------------------------------------------------------------------
1 | name: CI
2 |
3 | on:
4 | pull_request:
5 | branches:
6 | - master
7 |
8 | jobs:
9 | build-and-test:
10 |
11 | runs-on: ${{ matrix.os }}
12 | strategy:
13 | matrix:
14 | os: [ubuntu-latest, windows-latest, macos-latest]
15 | python-version: [3.7, 3.8]
16 | steps:
17 | - uses: actions/checkout@v1
18 | - name: Set up Python ${{ matrix.python-version }}
19 | uses: actions/setup-python@v1
20 | with:
21 | python-version: ${{ matrix.python-version }}
22 | - name: Install dependencies
23 | run: |
24 | python -m pip install --upgrade pip
25 | pip install -e .[dev]
26 | - name: Lint with flake8
27 | run: |
28 | flake8 slider
29 | - name: Test with pytest
30 | run: |
31 | pytest slider/
32 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | etc/unzipped-beatmap
2 | notebooks/
3 |
4 | build/
5 | dist/
6 | *.egg
7 | *.egg-info
8 |
9 | # python artifacts
10 | *.pyc
11 |
12 | # spearmint
13 | output/
14 |
15 | # osu! API key
16 | .api-key
17 |
18 | .params
19 |
20 | .ipynb_checkpoints/*
21 | *.ipynb
22 |
23 | data/*
24 | venv/*
25 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | GNU LESSER GENERAL PUBLIC LICENSE
2 | Version 3, 29 June 2007
3 |
4 | Copyright (C) 2007 Free Software Foundation, Inc.
5 | Everyone is permitted to copy and distribute verbatim copies
6 | of this license document, but changing it is not allowed.
7 |
8 |
9 | This version of the GNU Lesser General Public License incorporates
10 | the terms and conditions of version 3 of the GNU General Public
11 | License, supplemented by the additional permissions listed below.
12 |
13 | 0. Additional Definitions.
14 |
15 | As used herein, "this License" refers to version 3 of the GNU Lesser
16 | General Public License, and the "GNU GPL" refers to version 3 of the GNU
17 | General Public License.
18 |
19 | "The Library" refers to a covered work governed by this License,
20 | other than an Application or a Combined Work as defined below.
21 |
22 | An "Application" is any work that makes use of an interface provided
23 | by the Library, but which is not otherwise based on the Library.
24 | Defining a subclass of a class defined by the Library is deemed a mode
25 | of using an interface provided by the Library.
26 |
27 | A "Combined Work" is a work produced by combining or linking an
28 | Application with the Library. The particular version of the Library
29 | with which the Combined Work was made is also called the "Linked
30 | Version".
31 |
32 | The "Minimal Corresponding Source" for a Combined Work means the
33 | Corresponding Source for the Combined Work, excluding any source code
34 | for portions of the Combined Work that, considered in isolation, are
35 | based on the Application, and not on the Linked Version.
36 |
37 | The "Corresponding Application Code" for a Combined Work means the
38 | object code and/or source code for the Application, including any data
39 | and utility programs needed for reproducing the Combined Work from the
40 | Application, but excluding the System Libraries of the Combined Work.
41 |
42 | 1. Exception to Section 3 of the GNU GPL.
43 |
44 | You may convey a covered work under sections 3 and 4 of this License
45 | without being bound by section 3 of the GNU GPL.
46 |
47 | 2. Conveying Modified Versions.
48 |
49 | If you modify a copy of the Library, and, in your modifications, a
50 | facility refers to a function or data to be supplied by an Application
51 | that uses the facility (other than as an argument passed when the
52 | facility is invoked), then you may convey a copy of the modified
53 | version:
54 |
55 | a) under this License, provided that you make a good faith effort to
56 | ensure that, in the event an Application does not supply the
57 | function or data, the facility still operates, and performs
58 | whatever part of its purpose remains meaningful, or
59 |
60 | b) under the GNU GPL, with none of the additional permissions of
61 | this License applicable to that copy.
62 |
63 | 3. Object Code Incorporating Material from Library Header Files.
64 |
65 | The object code form of an Application may incorporate material from
66 | a header file that is part of the Library. You may convey such object
67 | code under terms of your choice, provided that, if the incorporated
68 | material is not limited to numerical parameters, data structure
69 | layouts and accessors, or small macros, inline functions and templates
70 | (ten or fewer lines in length), you do both of the following:
71 |
72 | a) Give prominent notice with each copy of the object code that the
73 | Library is used in it and that the Library and its use are
74 | covered by this License.
75 |
76 | b) Accompany the object code with a copy of the GNU GPL and this license
77 | document.
78 |
79 | 4. Combined Works.
80 |
81 | You may convey a Combined Work under terms of your choice that,
82 | taken together, effectively do not restrict modification of the
83 | portions of the Library contained in the Combined Work and reverse
84 | engineering for debugging such modifications, if you also do each of
85 | the following:
86 |
87 | a) Give prominent notice with each copy of the Combined Work that
88 | the Library is used in it and that the Library and its use are
89 | covered by this License.
90 |
91 | b) Accompany the Combined Work with a copy of the GNU GPL and this license
92 | document.
93 |
94 | c) For a Combined Work that displays copyright notices during
95 | execution, include the copyright notice for the Library among
96 | these notices, as well as a reference directing the user to the
97 | copies of the GNU GPL and this license document.
98 |
99 | d) Do one of the following:
100 |
101 | 0) Convey the Minimal Corresponding Source under the terms of this
102 | License, and the Corresponding Application Code in a form
103 | suitable for, and under terms that permit, the user to
104 | recombine or relink the Application with a modified version of
105 | the Linked Version to produce a modified Combined Work, in the
106 | manner specified by section 6 of the GNU GPL for conveying
107 | Corresponding Source.
108 |
109 | 1) Use a suitable shared library mechanism for linking with the
110 | Library. A suitable mechanism is one that (a) uses at run time
111 | a copy of the Library already present on the user's computer
112 | system, and (b) will operate properly with a modified version
113 | of the Library that is interface-compatible with the Linked
114 | Version.
115 |
116 | e) Provide Installation Information, but only if you would otherwise
117 | be required to provide such information under section 6 of the
118 | GNU GPL, and only to the extent that such information is
119 | necessary to install and execute a modified version of the
120 | Combined Work produced by recombining or relinking the
121 | Application with a modified version of the Linked Version. (If
122 | you use option 4d0, the Installation Information must accompany
123 | the Minimal Corresponding Source and Corresponding Application
124 | Code. If you use option 4d1, you must provide the Installation
125 | Information in the manner specified by section 6 of the GNU GPL
126 | for conveying Corresponding Source.)
127 |
128 | 5. Combined Libraries.
129 |
130 | You may place library facilities that are a work based on the
131 | Library side by side in a single library together with other library
132 | facilities that are not Applications and are not covered by this
133 | License, and convey such a combined library under terms of your
134 | choice, if you do both of the following:
135 |
136 | a) Accompany the combined library with a copy of the same work based
137 | on the Library, uncombined with any other library facilities,
138 | conveyed under the terms of this License.
139 |
140 | b) Give prominent notice with the combined library that part of it
141 | is a work based on the Library, and explaining where to find the
142 | accompanying uncombined form of the same work.
143 |
144 | 6. Revised Versions of the GNU Lesser General Public License.
145 |
146 | The Free Software Foundation may publish revised and/or new versions
147 | of the GNU Lesser General Public License from time to time. Such new
148 | versions will be similar in spirit to the present version, but may
149 | differ in detail to address new problems or concerns.
150 |
151 | Each version is given a distinguishing version number. If the
152 | Library as you received it specifies that a certain numbered version
153 | of the GNU Lesser General Public License "or any later version"
154 | applies to it, you have the option of following the terms and
155 | conditions either of that published version or of any later version
156 | published by the Free Software Foundation. If the Library as you
157 | received it does not specify a version number of the GNU Lesser
158 | General Public License, you may choose any version of the GNU Lesser
159 | General Public License ever published by the Free Software Foundation.
160 |
161 | If the Library as you received it specifies that a proxy can decide
162 | whether future versions of the GNU Lesser General Public License shall
163 | apply, that proxy's public statement of acceptance of any version is
164 | permanent authorization for you to choose that version for the
165 | Library.
166 |
--------------------------------------------------------------------------------
/README.rst:
--------------------------------------------------------------------------------
1 | slider
2 | ======
3 |
4 | Utilities for working with `osu! `_ files and data.
5 |
6 | `Read the docs! `_
7 |
8 | Included Tools
9 | --------------
10 |
11 | Beatmap Parser
12 | ~~~~~~~~~~~~~~
13 |
14 | Slider includes an osu! beatmap parser for programmatic access and manipulation of
15 | ``.osu`` and ``.osz`` files.
16 |
17 | Replay Parser
18 | ~~~~~~~~~~~~~
19 |
20 | Slider includes an osu! replay parser for reading metadata, 300/100/50/miss
21 | counts, and input stream data out of ``.osr`` files.
22 |
23 | Osu! API
24 | ~~~~~~~~
25 |
26 | Slider includes a Python interface to the osu! web API for requesting
27 | information about users or beatmaps.
28 |
29 | Dependencies
30 | ------------
31 |
32 | Slider currently requires Python 3.6+.
33 |
34 | Slider also requires a few PyData tools like numpy and scipy; see the
35 | ``setup.py`` for a full list of required packages.
36 |
37 | Thanks
38 | ------
39 |
40 | I would like to thank `peppy `_ for creating osu! and
41 | providing resources for writing these tools.
42 |
--------------------------------------------------------------------------------
/docs/Makefile:
--------------------------------------------------------------------------------
1 | # Minimal makefile for Sphinx documentation
2 | #
3 |
4 | # You can set these variables from the command line.
5 | SPHINXOPTS =
6 | SPHINXBUILD = sphinx-build
7 | SPHINXPROJ = slider
8 | SOURCEDIR = source
9 | BUILDDIR = build
10 |
11 | # Put it first so that "make" without argument is like "make help".
12 | help:
13 | @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
14 |
15 | .PHONY: help Makefile
16 |
17 | # Catch-all target: route all unknown targets to Sphinx using the new
18 | # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
19 | %: Makefile
20 | @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
--------------------------------------------------------------------------------
/docs/deploy.py:
--------------------------------------------------------------------------------
1 | # This file is taken from the Zipline project with minor modifications:
2 | # github.com/quantopian/zipline
3 | #
4 | # Copyright 2016 Quantopian, Inc.
5 | #
6 | # Licensed under the Apache License, Version 2.0 (the "License");
7 | # you may not use this file except in compliance with the License.
8 | # You may obtain a copy of the License at
9 | #
10 | # http://www.apache.org/licenses/LICENSE-2.0
11 | #
12 | # Unless required by applicable law or agreed to in writing, software
13 | # distributed under the License is distributed on an "AS IS" BASIS,
14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 | # See the License for the specific language governing permissions and
16 | # limitations under the License.
17 |
18 | from contextlib import contextmanager
19 | from glob import glob
20 | import os
21 | from os.path import abspath, basename, dirname, exists, isfile
22 | from shutil import move, rmtree
23 | from subprocess import check_call
24 |
25 | HERE = dirname(abspath(__file__))
26 | SLIDER_ROOT = dirname(HERE)
27 | TEMP_LOCATION = "/tmp/slider-doc"
28 | TEMP_LOCATION_GLOB = TEMP_LOCATION + "/*"
29 |
30 |
31 | @contextmanager
32 | def removing(path):
33 | try:
34 | yield
35 | finally:
36 | rmtree(path)
37 |
38 |
39 | def ensure_not_exists(path):
40 | if not exists(path):
41 | return
42 | if isfile(path):
43 | os.unlink(path)
44 | else:
45 | rmtree(path)
46 |
47 |
48 | def main():
49 | old_dir = os.getcwd()
50 | print("Moving to %s." % HERE)
51 | os.chdir(HERE)
52 |
53 | try:
54 | print("Building docs with 'make html'")
55 | check_call(["make", "html"])
56 |
57 | print("Clearing temp location '%s'" % TEMP_LOCATION)
58 | rmtree(TEMP_LOCATION, ignore_errors=True)
59 |
60 | with removing(TEMP_LOCATION):
61 | print("Copying built files to temp location.")
62 | move("build/html", TEMP_LOCATION)
63 |
64 | print("Moving to '%s'" % SLIDER_ROOT)
65 | os.chdir(SLIDER_ROOT)
66 |
67 | print("Checking out gh-pages branch.")
68 | check_call(
69 | ["git", "branch", "-f", "--track", "gh-pages", "origin/gh-pages"]
70 | )
71 | check_call(["git", "checkout", "gh-pages"])
72 | check_call(["git", "reset", "--hard", "origin/gh-pages"])
73 |
74 | print("Copying built files:")
75 | for file_ in glob(TEMP_LOCATION_GLOB):
76 | base = basename(file_)
77 |
78 | print("%s -> %s" % (file_, base))
79 | ensure_not_exists(base)
80 | move(file_, ".")
81 | finally:
82 | os.chdir(old_dir)
83 |
84 | print()
85 | print("Updated documentation branch in directory %s" % SLIDER_ROOT)
86 | print("If you are happy with these changes, commit and push to gh-pages.")
87 |
88 |
89 | if __name__ == "__main__":
90 | main()
91 |
--------------------------------------------------------------------------------
/docs/source/appendix.rst:
--------------------------------------------------------------------------------
1 | Appendix
2 | ========
3 |
4 | Beatmap
5 | -------
6 |
7 | .. autoclass:: slider.beatmap.Beatmap
8 | :members:
9 |
10 | .. autoclass:: slider.beatmap.HitObject
11 | :members:
12 |
13 | .. autoclass:: slider.beatmap.Circle
14 | :members:
15 |
16 | .. autoclass:: slider.beatmap.Slider
17 | :members:
18 |
19 | .. autoclass:: slider.beatmap.Spinner
20 | :members:
21 |
22 | .. autoclass:: slider.beatmap.HoldNote
23 | :members:
24 |
25 | Library
26 | -------
27 |
28 | .. autoclass:: slider.library.Library
29 | :members:
30 |
31 | Client
32 | ------
33 |
34 | .. autoclass:: slider.client.Client
35 | :members:
36 |
37 | .. autoclass:: slider.client.BeatmapResult
38 | :members:
39 |
40 | .. autoclass:: slider.client.UnknownBeatmap
41 | :members:
42 |
43 | .. autoclass:: slider.client.User
44 | :members:
45 |
46 | .. autoclass:: slider.client.UserEvent
47 | :members:
48 |
49 | .. autoclass:: slider.client.HighScore
50 | :members:
51 |
52 | .. autoclass:: slider.client.ApprovedState
53 | :members:
54 | :undoc-members:
55 |
56 | .. autoclass:: slider.client.Genre
57 | :members:
58 | :undoc-members:
59 |
60 | .. autoclass:: slider.client.Language
61 | :members:
62 | :undoc-members:
63 |
64 | Replay
65 | ------
66 |
67 | .. autoclass:: slider.replay.Replay
68 | :members:
69 |
70 | .. autoclass:: slider.replay.Action
71 | :members:
72 |
73 | Collection
74 | ----------
75 |
76 | .. autoclass:: slider.collection.CollectionDB
77 | :members:
78 |
79 | .. autoclass:: slider.collection.Collection
80 | :members:
81 |
82 | Game Modes
83 | ----------
84 |
85 | .. autoclass:: slider.game_mode.GameMode
86 | :members:
87 | :undoc-members:
88 |
89 | Mods
90 | ----
91 |
92 | .. autoclass:: slider.mod.Mod
93 | :members:
94 | :undoc-members:
95 |
96 | .. autofunction:: slider.mod.ar_to_ms
97 |
98 | .. autofunction:: slider.mod.ms_to_ar
99 |
100 | .. autofunction:: slider.mod.circle_radius
101 |
102 | Utilities
103 | ---------
104 |
105 | .. autofunction:: slider.utils.accuracy
106 |
107 | .. autoclass:: slider.position.Position
108 | :members:
109 |
110 | .. autoclass:: slider.bit_enum.BitEnum
111 | :members:
112 |
--------------------------------------------------------------------------------
/docs/source/client.rst:
--------------------------------------------------------------------------------
1 | Osu! API
2 | ========
3 |
4 | Peppy, being the hero that he is, exposes a web API for making queries about
5 | osu!. Slider provides a Python interface to this web API through a
6 | :class:`~slider.client.Client` object. The client knows how to format messages
7 | to send to the osu! API and knows how to parse the results returned. It will
8 | also attempt to do argument validation client side to avoid making a bad web
9 | request.
10 |
11 | User Information
12 | ----------------
13 |
14 | The :class:`~slider.client.Client` can fetch user information with the
15 | :meth:`~slider.client.Client.user` method. This method can look up a user by
16 | either username or user id. It will explicitly tell the osu! server which
17 | identifier you are using to avoid ambiguity. The method also accepts the game
18 | mode to fetch information about.
19 |
20 | High Scores
21 | ~~~~~~~~~~~
22 |
23 | If we already have a :class:`~slider.client.User` object, we can request their
24 | high scores with the :meth:`~slider.client.User.high_scores` method. This will
25 | return a list of :class:`~slider.client.HighScore` objects which has metadata
26 | about the play like which map it was and the hit counts. Right now there is no
27 | way to recover the :class:`~slider.replay.Replay` object from the
28 | :class:`~slider.client.HighScore`.
29 |
30 | If we do not yet have a :class:`~slider.client.User` object, we can request the
31 | high scores directly with :meth:`~slider.client.Client.user_best`. This takes
32 | the user identifier and game mode but just directly returns the list of
33 | :class:`~slider.client.HighScore` objects. This method is more efficient if you
34 | only want to get the high scores for a user.
35 |
36 | Beatmaps
37 | --------
38 |
39 | The osu! API allows us to query for beatmaps themselves. Slider exposes this
40 | through the :meth:`~slider.client.Client.beatmap` method. This method can either
41 | be used to look up a single beatmap by id or md5 hash, or to fetch maps in bulk
42 | by date ranked.
43 |
44 | .. note::
45 |
46 | When fetching maps in bulk, we can only get 500 results at a time.
47 |
48 | When we get results from the :meth:`~slider.client.Client.beatmap` method, they
49 | are returned as :class:`~slider.client.BeatmapResult` objects instead of the
50 | normal :class:`slider.beatmap.Beatmap`. The
51 | :class:`~slider.client.BeatmapResult` object holds the extra information about a
52 | map which is only available through the client, for example: the pass and play
53 | counts.
54 |
55 | The :class:`~slider.client.Beatmap` can be fetched from the
56 | :class:`~slider.client.BeatmapResult` object with the
57 | :meth:`~slider.client.BeatmapResult.beatmap` method. This can be passed
58 | ``save=True`` to save the downloaded ``.osu`` file into the
59 | :class:`~slider.library.Library`.
60 |
--------------------------------------------------------------------------------
/docs/source/conf.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # -*- coding: utf-8 -*-
3 | #
4 | # slider documentation build configuration file, created by
5 | # sphinx-quickstart on Tue Apr 18 01:37:25 2017.
6 | #
7 | # This file is execfile()d with the current directory set to its
8 | # containing dir.
9 | #
10 | # Note that not all possible configuration values are present in this
11 | # autogenerated file.
12 | #
13 | # All configuration values have a default; values that are commented out
14 | # serve to show the default.
15 |
16 | # If extensions (or modules to document with autodoc) are in another directory,
17 | # add these directories to sys.path here. If the directory is relative to the
18 | # documentation root, use os.path.abspath to make it absolute, like shown here.
19 | #
20 | # import os
21 | # import sys
22 | # sys.path.insert(0, os.path.abspath('.'))
23 |
24 |
25 | # -- General configuration ------------------------------------------------
26 |
27 | # If your documentation needs a minimal Sphinx version, state it here.
28 | #
29 | # needs_sphinx = '1.0'
30 |
31 | # Add any Sphinx extension module names here, as strings. They can be
32 | # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
33 | # ones.
34 | extensions = [
35 | "sphinx.ext.autodoc",
36 | "sphinx.ext.intersphinx",
37 | "sphinx.ext.extlinks",
38 | "sphinx.ext.autosummary",
39 | "sphinx.ext.todo",
40 | "sphinx.ext.mathjax",
41 | "sphinx.ext.viewcode",
42 | "numpydoc",
43 | ]
44 |
45 | numpydoc_show_class_members = False
46 |
47 | # Add any paths that contain templates here, relative to this directory.
48 | templates_path = ["_templates"]
49 |
50 | # The suffix(es) of source filenames.
51 | # You can specify multiple suffix as a list of string:
52 | #
53 | # source_suffix = ['.rst', '.md']
54 | source_suffix = ".rst"
55 |
56 | # The master toctree document.
57 | master_doc = "index"
58 |
59 | # General information about the project.
60 | project = "slider"
61 | copyright = "2017, Joe Jevnik"
62 | author = "Joe Jevnik"
63 |
64 | # The version info for the project you're documenting, acts as replacement for
65 | # |version| and |release|, also used in various other places throughout the
66 | # built documents.
67 | #
68 | # The short X.Y version.
69 | version = "0.8.2"
70 | # The full version, including alpha/beta/rc tags.
71 | release = "0.8.2"
72 |
73 | # The language for content autogenerated by Sphinx. Refer to documentation
74 | # for a list of supported languages.
75 | #
76 | # This is also used if you do content translation via gettext catalogs.
77 | # Usually you set "language" from the command line for these cases.
78 | language = None
79 |
80 | # List of patterns, relative to source directory, that match files and
81 | # directories to ignore when looking for source files.
82 | # This patterns also effect to html_static_path and html_extra_path
83 | exclude_patterns = []
84 |
85 | # The name of the Pygments (syntax highlighting) style to use.
86 | pygments_style = "sphinx"
87 |
88 | # If true, `todo` and `todoList` produce output, else they produce nothing.
89 | todo_include_todos = True
90 |
91 |
92 | # -- Options for HTML output ----------------------------------------------
93 |
94 | # The theme to use for HTML and HTML Help pages. See the documentation for
95 | # a list of builtin themes.
96 | #
97 | html_theme = "sphinx_rtd_theme"
98 |
99 | # Theme options are theme-specific and customize the look and feel of a theme
100 | # further. For a list of options available for each theme, see the
101 | # documentation.
102 | #
103 | # html_theme_options = {}
104 |
105 | # Add any paths that contain custom static files (such as style sheets) here,
106 | # relative to this directory. They are copied after the builtin static files,
107 | # so a file named "default.css" will overwrite the builtin "default.css".
108 | html_static_path = ["_static"]
109 |
110 |
111 | # -- Options for HTMLHelp output ------------------------------------------
112 |
113 | # Output file base name for HTML help builder.
114 | htmlhelp_basename = "sliderdoc"
115 |
116 |
117 | # -- Options for LaTeX output ---------------------------------------------
118 |
119 | latex_elements = {
120 | # The paper size ('letterpaper' or 'a4paper').
121 | #
122 | # 'papersize': 'letterpaper',
123 | # The font size ('10pt', '11pt' or '12pt').
124 | #
125 | # 'pointsize': '10pt',
126 | # Additional stuff for the LaTeX preamble.
127 | #
128 | # 'preamble': '',
129 | # Latex figure (float) alignment
130 | #
131 | # 'figure_align': 'htbp',
132 | }
133 |
134 | # Grouping the document tree into LaTeX files. List of tuples
135 | # (source start file, target name, title,
136 | # author, documentclass [howto, manual, or own class]).
137 | latex_documents = [
138 | (master_doc, "slider.tex", "slider Documentation", "Joe Jevnik", "manual"),
139 | ]
140 |
141 |
142 | # -- Options for manual page output ---------------------------------------
143 |
144 | # One entry per manual page. List of tuples
145 | # (source start file, name, description, authors, manual section).
146 | man_pages = [(master_doc, "slider", "slider Documentation", [author], 1)]
147 |
148 |
149 | # -- Options for Texinfo output -------------------------------------------
150 |
151 | # Grouping the document tree into Texinfo files. List of tuples
152 | # (source start file, target name, title, author,
153 | # dir menu entry, description, category)
154 | texinfo_documents = [
155 | (
156 | master_doc,
157 | "slider",
158 | "slider Documentation",
159 | author,
160 | "slider",
161 | "One line description of project.",
162 | "Miscellaneous",
163 | ),
164 | ]
165 |
166 |
167 | # Example configuration for intersphinx: refer to the Python standard library.
168 | intersphinx_mapping = {"https://docs.python.org/": None}
169 |
--------------------------------------------------------------------------------
/docs/source/index.rst:
--------------------------------------------------------------------------------
1 | .. include:: ../../README.rst
2 |
3 | .. toctree::
4 | :maxdepth: 2
5 | :caption: Contents:
6 |
7 | what-is-a-beatmap
8 | working-with-beatmaps
9 | replays
10 | client
11 | appendix
12 |
13 | Indices and tables
14 | ==================
15 |
16 | * :ref:`genindex`
17 | * :ref:`modindex`
18 | * :ref:`search`
19 |
--------------------------------------------------------------------------------
/docs/source/replays.rst:
--------------------------------------------------------------------------------
1 | Replays
2 | =======
3 |
4 | Osu! saves player replays in the osu!/data/r directory as ``.osr`` files. We can use
5 | slider to read and process these binary files. Slider represents an osu! replay
6 | with the :class:`~slider.replay.Replay` object. This object stores metadata
7 | about the play like the user who was playing, when the replay was recorded, and
8 | the hit counts. The replay also stores a time-series of all of the events the
9 | user performed during the session.
10 |
11 | Reading a :class:`~slider.replay.Replay`
12 | ----------------------------------------
13 |
14 | To read a replay, we first need to get a :class:`~slider.library.Library`. It
15 | might seem odd that we need to know about all of our beatmaps to read a single
16 | replay; however, the replay only stores an md5 hash of the beatmap played, not
17 | the beatmap id. This is likely so that revisions to the map will invalidate the
18 | old replay. The library contains a lookup table from md5 to beatmap object which
19 | is used to resolve the actual :class:`~slider.beatmap.Beatmap` object for the
20 | replay. To parse a replay, we can use :meth:`~slider.replay.Replay.from_path`
21 | and pass the path to the ``.osr`` file along with the
22 | :class:`~slider.library.Library`.
23 |
24 | Replay Data
25 | -----------
26 |
27 | The replay stores the user's hit counts (``count_300``, ``count_100``,
28 | ``count_50``, and ``count_miss``) along with the max combo. The replay also
29 | tells us which mods were used when playing the song. The replay also stores all
30 | of the user input as a time-series of (cursor location, keyboard state)
31 | pairs.
32 |
33 | Slider stores this information in a :class:`slider.replay.Action`. The offset
34 | here is an offset from the previous action, not an absolute offset.
35 |
--------------------------------------------------------------------------------
/docs/source/what-is-a-beatmap.rst:
--------------------------------------------------------------------------------
1 | What is a Beatmap?
2 | ==================
3 |
4 | A Beatmap in osu! is a description of song, including metadata like title and
5 | artist as well as the locations of all of the circles, sliders, and
6 | spinners. Osu! stores this information in ``.osu`` files. The ``.osu`` format is
7 | a text format like an ``.ini`` file with extensions for encoding the
8 | time-series of hit objects.
9 |
10 | In slider, the :class:`~slider.beatmap.Beatmap` object represents a beatmap and
11 | exposes the information from the ``.osu`` file.
12 |
13 | Hit Objects
14 | -----------
15 |
16 | A hit object is the generic term for a circle, slider, or spinner. These are the
17 | things you click in osu!. A hit object is composed of the (x, y, time) position
18 | in the map and the type. For some types of objects, there is some extra
19 | information.
20 |
21 | The (x, y) bounds for all hit objects are [0, 512] by [0, 384]. All hit objects
22 | fall within these bounds regardless of your resolution or window size.
23 |
24 | Sliders
25 | ```````
26 |
27 | For sliders, the (x, y, time) coordinate is for the start of the slider. The
28 | curve is encoded as a curve type, one of Linear, Bezier, Perfect, or Catmull,
29 | and the control points. The control points are a sequence of (x, y) coordinates
30 | which are interpreted by the curve type to define the shape of the
31 | slider. Control points may fall outside of the [0, 512] by [0, 384] bounds
32 | because they don't actually appear on your screen explicitly.
33 |
34 | Spinners
35 | ````````
36 |
37 | In addition to (x, y, time), spinners must encode the duration.
38 |
--------------------------------------------------------------------------------
/docs/source/working-with-beatmaps.rst:
--------------------------------------------------------------------------------
1 | Working with :class:`~slider.beatmap.Beatmap`\s
2 | ===============================================
3 |
4 | Instantiating a :class:`~slider.beatmap.Beatmap`
5 | ------------------------------------------------
6 |
7 | A :class:`~slider.beatmap.Beatmap` object can be created directly from a
8 | ``.osu`` file with :meth:`~slider.beatmap.Beatmap.from_path`. This function
9 | takes the path to the ``.osu`` file and returns the slider representation of it.
10 |
11 | To read an entire beatmap set (``.osz``), there is
12 | :meth:`~slider.beatmap.Beatmap.from_osz_path` which takes the path to the
13 | ``.osz`` file and returns a dictionary from version name to
14 | :class:`~slider.beatmap.Beatmap` object.
15 |
16 | Managing :class:`~slider.beatmap.Beatmap`\s with a :class:`~slider.library.Library`
17 | -----------------------------------------------------------------------------------
18 |
19 | A :class:`~slider.library.Library` is a collection of
20 | :class:`~slider.beatmap.Beatmap` objects which can be looked up by beatmap id
21 | or md5 hash.
22 |
23 | Creating a :class:`~slider.library.Library`
24 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
25 |
26 | CLI
27 | ```
28 |
29 | Slider libraries can be created from the command line like:
30 |
31 | .. code-block:: bash
32 |
33 | $ python -m slider library /path/to/beatmap/root [--recurse/--no-recurse]
34 |
35 | .. note::
36 |
37 | To use the CLI, you must install additional dependencies. Use ``pip install
38 | slider[cli]`` to do so.
39 |
40 |
41 | This command will search through ``/path/to/beatmap/root`` recursively and store
42 | metadata to allow slider to quickly find the ``.osu`` files. In the root of the
43 | directory a ``.slider.db`` file will be added which holds the lookup tables
44 | needed to fetch the ``.osu`` files on demand. To disable recursive traversal,
45 | you may use ``--no-recurse``.
46 |
47 | Programmatic
48 | ````````````
49 |
50 | A :class:`~slider.library.Library` can be created with
51 | :meth:`~slider.library.Library.create_db` which takes a directory and
52 | recursively searches for ``.osu`` files to add. In the root of the directory a
53 | ``.slider.db`` file will be added which holds the lookup tables needed to fetch
54 | the ``.osu`` files on demand.
55 |
56 | Downloading New Beatmaps
57 | ------------------------
58 |
59 | A :class:`~slider.library.Library` also has a
60 | :meth:`~slider.library.Library.download` method for fetching new beatmaps from
61 | the osu! server. This allows us to quickly get any map we need. The fetched map
62 | can optionally be saved to disk with ``save=True`` so that next time the map is
63 | requested we can load it from disk instead of making a web connection.
64 |
65 | The :meth:`~slider.library.Library.lookup_by_id` method also accepts a
66 | ``download=True`` argument which will fallback to downloading the map from the
67 | osu! server if it is not in the local library.
68 |
69 | Removing a Beatmap
70 | ------------------
71 |
72 | :meth:`~slider.library.Library.delete` will remove a
73 | :class:`~slider.beatmap.Beatmap` from the library. ``remove_file=False`` may be
74 | passed to preserve the underlying ``.osu`` file while removing the metadata from
75 | the internal library database.
76 |
--------------------------------------------------------------------------------
/setup.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | from setuptools import setup, find_packages
3 | import sys
4 |
5 | long_description = ""
6 |
7 | if "sdist" in sys.argv:
8 | with open("README.rst") as f:
9 | long_description = f.read()
10 |
11 |
12 | setup(
13 | name="slider",
14 | version="0.8.2",
15 | description="Utilities for working with osu! files and data",
16 | author="Joe Jevnik",
17 | author_email="joejev@gmail.com",
18 | packages=find_packages(),
19 | long_description=long_description,
20 | license="LGPLv3+",
21 | classifiers=[
22 | "Development Status :: 3 - Alpha",
23 | "License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+)", # noqa
24 | "Natural Language :: English",
25 | "Programming Language :: Python :: 3.6",
26 | "Programming Language :: Python :: 3 :: Only",
27 | "Topic :: Games/Entertainment",
28 | ],
29 | url="https://github.com/llllllllll/slider",
30 | install_requires=[
31 | "numpy",
32 | "requests",
33 | "scipy",
34 | ],
35 | extras_require={
36 | "dev": [
37 | "flake8==3.7.9",
38 | "mccabe==0.6.1",
39 | "pyflakes==2.1.1",
40 | "pytest==5.4.1",
41 | ],
42 | "cli": [
43 | "click",
44 | ],
45 | },
46 | )
47 |
--------------------------------------------------------------------------------
/slider/__init__.py:
--------------------------------------------------------------------------------
1 | from .beatmap import Beatmap, Circle, Slider, Spinner, TimingPoint, HitObject, HoldNote
2 | from .client import Client
3 | from .game_mode import GameMode
4 | from .mod import Mod
5 | from .position import Position
6 | from .replay import Replay
7 | from .library import Library
8 | from .collection import CollectionDB
9 |
10 | __version__ = "0.8.2"
11 |
12 |
13 | __all__ = [
14 | "Beatmap",
15 | "Client",
16 | "GameMode",
17 | "Library",
18 | "Mod",
19 | "Position",
20 | "Replay",
21 | "CollectionDB",
22 | "Circle",
23 | "Slider",
24 | "Spinner",
25 | "TimingPoint",
26 | "HitObject",
27 | "HoldNote",
28 | ]
29 |
--------------------------------------------------------------------------------
/slider/__main__.py:
--------------------------------------------------------------------------------
1 | from . import Library
2 |
3 | try:
4 | import click
5 | except ImportError as e:
6 | raise ImportError("click must be installed to use the slider cli") from e
7 |
8 |
9 | @click.group()
10 | def main():
11 | """Slider utilities."""
12 |
13 |
14 | @main.command()
15 | @click.argument(
16 | "beatmaps",
17 | type=click.Path(exists=True, file_okay=False),
18 | )
19 | @click.option(
20 | "--recurse/--no-recurse",
21 | help="Recurse through ``path`` searching for beatmaps?",
22 | default=True,
23 | )
24 | @click.option(
25 | "--progress/--no-progress",
26 | help="Show a progress bar?",
27 | default=True,
28 | )
29 | @click.option(
30 | "--skip-exceptions/--no-skip-exceptions",
31 | help="Skip beatmap files that cause exceptions rather than exiting?",
32 | default=False,
33 | )
34 | def library(beatmaps, recurse, progress, skip_exceptions):
35 | """Create a slider database from a directory of beatmaps."""
36 | Library.create_db(
37 | beatmaps,
38 | recurse=recurse,
39 | show_progress=progress,
40 | skip_exceptions=skip_exceptions,
41 | )
42 |
43 |
44 | if __name__ == "__main__":
45 | main()
46 |
--------------------------------------------------------------------------------
/slider/abc.py:
--------------------------------------------------------------------------------
1 | import abc
2 |
3 | # re-export
4 | abstractmethod = abc.abstractmethod
5 |
6 |
7 | class ABCMeta(abc.ABCMeta):
8 | def __new__(cls, name, bases, dict_):
9 | self = super().__new__(cls, name, bases, dict_)
10 |
11 | # copy docstrings down to implementation if the method does not
12 | # explicitly overwrite it
13 | super_dispatch = super(self, self)
14 | for meth in self.__abstractmethods__:
15 | impl = getattr(self, meth)
16 | if impl.__doc__ is None:
17 | try:
18 | impl.__doc__ = getattr(super_dispatch, meth).__doc__
19 | except AttributeError:
20 | pass
21 |
22 | return self
23 |
--------------------------------------------------------------------------------
/slider/bit_enum.py:
--------------------------------------------------------------------------------
1 | import enum
2 | from functools import reduce
3 | import operator as op
4 |
5 |
6 | class BitEnum(enum.IntEnum):
7 | """A type for enums representing bitmask field values."""
8 |
9 | @classmethod
10 | def pack(cls, **kwargs):
11 | """Pack a bitmask from explicit bit values.
12 |
13 | Parameters
14 | ----------
15 | kwargs
16 | The names of the fields and their status. Any fields not explicitly
17 | passed will be set to False.
18 |
19 | Returns
20 | -------
21 | bitmask : int
22 | The packed bitmask.
23 | """
24 | members = cls.__members__
25 | try:
26 | return reduce(
27 | op.or_,
28 | (members[k] * bool(v) for k, v in kwargs.items()),
29 | )
30 | except KeyError as e:
31 | raise TypeError(f"{e} is not a member of {cls.__qualname__}")
32 |
33 | @classmethod
34 | def unpack(cls, bitmask):
35 | """Unpack a bitmask into a dictionary from field name to field state.
36 |
37 | Parameters
38 | ----------
39 | bitmask : int
40 | The bitmask to unpack.
41 |
42 | Returns
43 | -------
44 | status : dict[str, bool]
45 | The mapping from field name to field status.
46 | """
47 | return {k: bool(bitmask & v) for k, v in cls.__members__.items()}
48 |
--------------------------------------------------------------------------------
/slider/cli.py:
--------------------------------------------------------------------------------
1 | from contextlib import contextmanager
2 |
3 |
4 | def maybe_show_progress(it, show_progress, **kwargs):
5 | """Optionally show a progress bar for the given iterator.
6 |
7 | Parameters
8 | ----------
9 | it : iterable
10 | The underlying iterator.
11 | show_progress : bool
12 | Should progress be shown.
13 | **kwargs
14 | Forwarded to the click progress bar.
15 |
16 | Returns
17 | -------
18 | itercontext : context manager
19 | A context manager whose enter is the actual iterator to use.
20 |
21 | Examples
22 | --------
23 | .. code-block:: python
24 |
25 | with maybe_show_progress([1, 2, 3], True) as ns:
26 | for n in ns:
27 | ...
28 | """
29 | if show_progress:
30 | try:
31 | import click
32 | except ImportError as e:
33 | raise ImportError("click must be installed to show a progressbar") from e
34 | return click.progressbar(it, **kwargs)
35 |
36 | @contextmanager
37 | def ctx():
38 | yield it
39 |
40 | return ctx()
41 |
--------------------------------------------------------------------------------
/slider/collection.py:
--------------------------------------------------------------------------------
1 | from .replay import consume_int, consume_string
2 |
3 |
4 | class CollectionDB:
5 | """An osu! ``collection.db`` file.
6 |
7 | Parameters
8 | ----------
9 | version : int
10 | Version number (e.g. 20150203)
11 | num_collections : int
12 | Number of collections
13 | collections : list[Collection]
14 | List of :class:`~slider.collection.Collection` s
15 | """
16 |
17 | def __init__(self, version, num_collections, collections):
18 | self.version = version
19 | self.num_collections = num_collections
20 | self.collections = collections
21 |
22 | @classmethod
23 | def from_path(cls, path):
24 | """Read in a ``collection.db`` file from disk.
25 |
26 | Parameters
27 | ----------
28 | path : str or pathlib.Path
29 | The path to the file to read from.
30 | """
31 | with open(path, "rb") as f:
32 | return cls.from_file(f)
33 |
34 | @classmethod
35 | def from_file(cls, file):
36 | """Read in a ``collection.db`` file from an open file object.
37 |
38 | Parameters
39 | ----------
40 | file : file-like
41 | The file object to read from.
42 | """
43 | return cls.parse(file.read())
44 |
45 | @classmethod
46 | def parse(cls, data):
47 | """Parse from ``collection.db`` data.
48 |
49 | Parameters
50 | ----------
51 | data : bytes
52 | The data from a ``collection.db`` file.
53 | """
54 | buffer = bytearray(data)
55 |
56 | version = consume_int(buffer)
57 | num_collections = consume_int(buffer)
58 | collections = []
59 | for i in range(num_collections):
60 | collections.append(Collection.parse(buffer))
61 |
62 | return cls(version, num_collections, collections)
63 |
64 |
65 | class Collection:
66 | """An osu! collection. One or more collections are present in a
67 | `collection.db` file.
68 |
69 | Parameters
70 | ----------
71 | name : str
72 | The collection's name
73 | num_beatmaps : int
74 | How many beatmaps the collection contains
75 | md5_hashes : list[str]
76 | List of MD5 hashes of each beatmap
77 | """
78 |
79 | def __init__(self, name, num_beatmaps, md5_hashes):
80 | self.name = name
81 | self.num_beatmaps = num_beatmaps
82 | self.md5_hashes = md5_hashes
83 |
84 | @classmethod
85 | def parse(cls, buffer):
86 | """Parse an osu! collection.
87 |
88 | Parameters
89 | ----------
90 | buffer : bytearray
91 | Buffer passed in from parsing ``CollectionDB``
92 | """
93 | name = consume_string(buffer)
94 | num_beatmaps = consume_int(buffer)
95 | md5_hashes = []
96 | for i in range(num_beatmaps):
97 | md5_hashes.append(consume_string(buffer))
98 |
99 | return cls(name, num_beatmaps, md5_hashes)
100 |
--------------------------------------------------------------------------------
/slider/example_data/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/llllllllll/slider/2f4437ac002e7eb6e2d0ae6dfc2da04e9fb82075/slider/example_data/__init__.py
--------------------------------------------------------------------------------
/slider/example_data/beatmaps/AKINO from bless4 & CHiCO with HoneyWorks - MIIRO vs. Ai no Scenario (monstrata) [Beginner].osu:
--------------------------------------------------------------------------------
1 | osu file format v14
2 |
3 | [General]
4 | AudioFilename: tatoe.mp3
5 | AudioLeadIn: 0
6 | PreviewTime: 6538
7 | Countdown: 0
8 | SampleSet: Soft
9 | StackLeniency: 0.7
10 | Mode: 0
11 | LetterboxInBreaks: 0
12 | WidescreenStoryboard: 0
13 |
14 | [Editor]
15 | DistanceSpacing: 1
16 | BeatDivisor: 4
17 | GridSize: 4
18 | TimelineZoom: 1.8
19 |
20 | [Metadata]
21 | Title:MIIRO vs. Ai no Scenario
22 | TitleUnicode:海色 vs. アイのシナリオ
23 | Artist:AKINO from bless4 & CHiCO with HoneyWorks
24 | ArtistUnicode:AKINO from bless4 & CHiCO with HoneyWorks
25 | Creator:monstrata
26 | Version:Beginner
27 | Source:
28 | Tags:kyshiro sukinathan ktgster pishifat smoothie world walaowey toybot sheela901 yuii- Sharkie みいろ tv size opening kantai collection kancolle fleet girls magic kaito 1412 まじっく快斗1412 艦隊これくしょん -艦これ-
29 | BeatmapID:741358
30 | BeatmapSetID:325158
31 |
32 | [Difficulty]
33 | HPDrainRate:2
34 | CircleSize:2.5
35 | OverallDifficulty:2
36 | ApproachRate:2
37 | SliderMultiplier:0.75
38 | SliderTickRate:1
39 |
40 | [Events]
41 | //Background and Video events
42 | 0,0,"miiro_no_scenario.png",0,0
43 | //Break Periods
44 | //Storyboard Layer 0 (Background)
45 | //Storyboard Layer 1 (Fail)
46 | //Storyboard Layer 2 (Pass)
47 | //Storyboard Layer 3 (Foreground)
48 | //Storyboard Sound Samples
49 |
50 | [TimingPoints]
51 | 0,307.692307692308,4,2,1,60,1,0
52 | 1076,-133.333333333333,4,2,1,60,0,0
53 | 3692,-133.333333333333,4,1,1,60,0,0
54 | 7230,-133.333333333333,4,1,1,60,0,0
55 | 17230,-133.333333333333,4,2,1,45,0,0
56 | 27076,-133.333333333333,4,1,1,60,0,0
57 | 36923,-133.333333333333,4,2,1,45,0,0
58 | 46769,-133.333333333333,4,2,1,60,0,0
59 | 55692,333.333333333333,4,2,1,45,1,0
60 | 56692,333.333333333333,4,2,1,70,1,1
61 | 56692,-133.333333333333,4,2,1,70,0,1
62 | 67275,-133.333333333333,4,2,1,70,0,0
63 | 67358,-133.333333333333,4,2,1,70,0,1
64 | 79025,-133.333333333333,4,2,1,50,0,0
65 |
66 |
67 | [Colours]
68 | Combo1 : 0,64,128
69 | Combo2 : 0,255,255
70 | Combo3 : 128,0,255
71 | Combo4 : 192,192,192
72 |
73 | [HitObjects]
74 | 88,200,1230,6,0,P|121:250|175:274,2,112.500004291535,6|0|2,0:0|0:0|0:0,0:0:0:0:
75 | 113,91,3076,1,0,0:0:0:0:
76 | 194,168,3692,2,0,B|304:225|304:133|410:184,1,225,6|2,0:2|2:0,0:0:0:0:
77 | 370,224,7230,6,0,L|223:241,1,140.625005364418,4|0,0:0|0:0,0:0:0:0:
78 | 126,194,8615,2,0,P|137:130|199:78,1,140.625005364418,6|2,0:0|0:0,0:0:0:0:
79 | 244,96,9692,6,0,B|297:113|297:113|334:75|384:84,1,140.625005364418,6|2,0:0|0:0,0:0:0:0:
80 | 373,195,11076,2,0,P|309:222|239:206,1,140.625005364418,2|0,0:0|0:0,0:0:0:0:
81 | 188,186,12153,6,0,P|171:256|192:320,1,140.625005364418,6|0,0:0|0:0,0:0:0:0:
82 | 298,358,13538,2,0,B|360:379|360:379|423:364|424:296,1,168.750006437302,2|8,0:0|0:0,0:0:0:0:
83 | 424,250,14769,6,0,B|404:195|445:192|423:136,2,112.500004291535,2|8|2,0:0|0:0|0:0,0:0:0:0:
84 | 313,270,16615,1,2,0:2:0:0:
85 | 203,253,17230,6,0,P|225:202|268:167,2,112.500004291535,2|0|0,0:2|0:0|0:0,0:0:0:0:
86 | 247,359,19076,1,2,0:0:0:0:
87 | 313,270,19692,6,0,B|355:260|355:260|389:283|423:264,2,112.500004291535,2|2|0,0:2|0:0|0:0,0:0:0:0:
88 | 300,158,21538,1,2,0:0:0:0:
89 | 208,222,22153,6,0,B|100:253|100:253|62:199|-5:219,2,225.000008583069,2|0|0,0:0|0:0|0:0,0:0:0:0:
90 | 315,189,25230,1,0,0:0:0:0:
91 | 379,281,25846,1,6,0:0:0:0:
92 | 192,155,27076,6,0,B|136:125|152:59|152:59|120:8|72:23,2,196.875007510186,4|2|8,0:0|0:0|0:0,0:0:0:0:
93 | 240,184,29538,6,0,B|295:219|279:279|279:279|337:259|381:307,2,225.000008583069,0|2|2,0:0|0:2|0:0,0:0:0:0:
94 | 128,167,32615,2,0,B|71:167|71:167|25:202,2,112.500004291535,0|2|2,0:2|0:0|0:2,0:0:0:0:
95 | 256,192,34461,12,4,36923,0:0:0:0:
96 | 256,192,38153,6,0,L|174:150,2,84.3750032186509,2|2|2,2:0|2:0|2:0,0:0:0:0:
97 | 307,215,39384,2,0,B|363:244|410:205|410:205|445:261|405:309,2,225.000008583069,2|2|2,2:0|2:0|2:0,0:0:0:0:
98 | 236,126,42461,5,2,2:0:0:0:
99 | 194,230,43076,2,0,L|118:290,2,84.3750032186509,2|2|2,2:0|2:0|2:0,0:0:0:0:
100 | 239,195,44307,6,0,B|277:187|284:149|284:149|358:214|365:124|437:186,2,225.000008583069,2|10|6,2:0|2:0|0:0,0:0:0:0:
101 | 136,242,47384,5,2,0:0:0:0:
102 | 228,308,48000,2,0,B|280:333|336:308|336:308|388:332|448:308,1,225.000008583069,2|0,0:0|0:0,0:0:0:0:
103 | 512,220,49846,5,2,0:0:0:0:
104 | 420,154,50461,2,0,B|368:129|312:154|312:154|260:130|200:154,1,225.000008583069,2|4,0:0|2:0,0:0:0:0:
105 | 256,192,52000,12,0,55230,2:0:0:0:
106 | 256,192,56692,38,0,P|320:229|327:368,1,225.000008583069,6|0,0:0|0:0,0:0:0:0:
107 | 235,303,58692,1,0,1:0:0:0:
108 | 150,230,59358,6,0,P|150:156|266:80,1,225.000008583069,2|0,0:0|0:0,0:0:0:0:
109 | 256,192,61358,1,0,1:0:0:0:
110 | 235,303,62025,6,0,P|188:335|127:340,2,112.500004291535,4|8|2,0:0|0:0|0:0,0:0:0:0:
111 | 342,266,64025,1,8,0:0:0:0:
112 | 363,154,64691,6,0,B|373:100|373:100|325:50|251:62|227:120,1,225.000008583069,8|2,0:0|0:0,0:0:0:0:
113 | 257,223,66691,1,8,0:0:0:0:
114 | 173,298,67358,6,0,L|66:347,2,112.500004291535,4|2|0,0:0|0:0|0:0,0:0:0:0:
115 | 184,186,69358,1,0,1:0:0:0:
116 | 287,140,70025,6,0,L|394:91,2,112.500004291535,2|2|0,0:0|0:0|0:0,0:0:0:0:
117 | 275,252,72025,1,0,1:0:0:0:
118 | 366,318,72691,6,0,B|411:353|411:353|433:261|496:324|515:228,1,225.000008583069,4|2,0:0|0:0,0:0:0:0:
119 | 477,126,74691,1,0,1:0:0:0:
120 | 365,105,75358,6,0,B|330:130|285:127|285:127|282:171|243:196|243:196|236:262,1,225.000008583069,2|12,0:0|0:0,0:0:0:0:
121 | 147,325,77358,1,8,0:0:0:0:
122 | 41,287,78025,6,0,P|12:218|64:118,1,168.750006437302,6|14,0:0|0:0,0:0:0:0:
123 |
--------------------------------------------------------------------------------
/slider/example_data/beatmaps/AKINO from bless4 & CHiCO with HoneyWorks - MIIRO vs. Ai no Scenario (monstrata) [Hard].osu:
--------------------------------------------------------------------------------
1 | osu file format v14
2 |
3 | [General]
4 | AudioFilename: tatoe.mp3
5 | AudioLeadIn: 0
6 | PreviewTime: 6538
7 | Countdown: 0
8 | SampleSet: Normal
9 | StackLeniency: 0.7
10 | Mode: 0
11 | LetterboxInBreaks: 0
12 | WidescreenStoryboard: 0
13 |
14 | [Editor]
15 | DistanceSpacing: 1.2
16 | BeatDivisor: 4
17 | GridSize: 4
18 | TimelineZoom: 1.8
19 |
20 | [Metadata]
21 | Title:MIIRO vs. Ai no Scenario
22 | TitleUnicode:海色 vs. アイのシナリオ
23 | Artist:AKINO from bless4 & CHiCO with HoneyWorks
24 | ArtistUnicode:AKINO from bless4 & CHiCO with HoneyWorks
25 | Creator:monstrata
26 | Version:Hard
27 | Source:
28 | Tags:kyshiro sukinathan ktgster pishifat smoothie world walaowey toybot sheela901 yuii- Sharkie みいろ tv size opening kantai collection kancolle fleet girls magic kaito 1412 まじっく快斗1412 艦隊これくしょん -艦これ-
29 | BeatmapID:722986
30 | BeatmapSetID:325158
31 |
32 | [Difficulty]
33 | HPDrainRate:5
34 | CircleSize:4
35 | OverallDifficulty:6
36 | ApproachRate:7.3
37 | SliderMultiplier:1.3
38 | SliderTickRate:1
39 |
40 | [Events]
41 | //Background and Video events
42 | 0,0,"miiro_no_scenario.png",0,0
43 | //Break Periods
44 | //Storyboard Layer 0 (Background)
45 | //Storyboard Layer 1 (Fail)
46 | //Storyboard Layer 2 (Pass)
47 | //Storyboard Layer 3 (Foreground)
48 | //Storyboard Sound Samples
49 |
50 | [TimingPoints]
51 | 0,307.692307692308,4,2,1,60,1,0
52 | 1076,-133.333333333333,4,2,1,60,0,0
53 | 3692,-133.333333333333,4,1,1,60,0,0
54 | 4923,-142.857142857143,4,1,1,60,0,0
55 | 5384,-125,4,1,1,60,0,0
56 | 5846,-111.111111111111,4,1,1,60,0,0
57 | 6307,-100,4,1,1,60,0,0
58 | 7230,-100,4,1,1,60,0,0
59 | 17230,-133.333333333333,4,2,1,45,0,0
60 | 27076,-100,4,1,1,60,0,0
61 | 36923,-133.333333333333,4,2,1,45,0,0
62 | 46769,-100,4,2,1,60,0,0
63 | 55692,333.333333333333,4,2,1,45,1,0
64 | 56692,333.333333333333,4,1,1,70,1,1
65 | 67275,-100,4,2,1,70,0,0
66 | 67358,-100,4,1,1,70,0,1
67 | 79025,-100,4,1,1,50,0,0
68 |
69 |
70 | [Colours]
71 | Combo1 : 0,64,128
72 | Combo2 : 0,255,255
73 | Combo3 : 128,0,255
74 | Combo4 : 192,192,192
75 |
76 | [HitObjects]
77 | 53,106,1230,6,0,L|115:116,1,48.750001859665,6|0,0:0|0:0,0:0:0:0:
78 | 106,187,1538,2,0,L|168:177,1,48.750001859665,0|0,0:0|0:0,0:0:0:0:
79 | 208,128,1846,2,0,P|275:90|343:136,1,146.250005578995,2|0,0:0|0:0,0:0:0:0:
80 | 275,168,2461,6,0,B|268:215|268:215|298:262,1,97.50000371933,2|2,0:0|0:0,0:0:0:0:
81 | 335,318,2923,2,0,L|363:369,2,48.750001859665,0|2|0,0:0|0:0|0:0,0:0:0:0:
82 | 408,304,3384,2,0,L|466:304,1,48.750001859665,2|0,0:0|0:0,0:0:0:0:
83 | 433,233,3692,6,0,P|442:219|339:238,1,292.50001115799,6|2,0:2|2:2,0:0:0:0:
84 | 160,320,4923,6,0,L|99:330,2,45.4999986114502,0|2|2,2:0|2:0|2:0,0:0:0:0:
85 | 212,262,5384,6,0,L|272:272,2,52,0|2|2,2:0|2:0|2:0,0:0:0:0:
86 | 134,218,5846,6,0,L|73:228,2,58.4999982147217,0|2|2,2:0|2:0|2:0,0:0:0:0:
87 | 215,163,6307,6,0,L|309:179,2,65,0|2|2,2:0|2:0|2:0,0:0:0:0:
88 | 126,121,6769,6,0,P|159:80|242:68,1,130,0|0,2:0|2:0,0:0:0:0:
89 | 215,163,7230,6,0,L|184:310,1,130,4|2,0:0|0:3,0:0:0:0:
90 | 177,368,7692,2,0,L|258:341,1,65,8|0,0:0|0:0,0:0:0:0:
91 | 268,275,8000,2,0,L|349:248,2,65,0|0|8,0:0|0:0|0:0,0:0:0:0:
92 | 116,312,8615,6,0,B|84:248|140:248|112:184,1,130,2|8,0:2|0:0,0:0:0:0:
93 | 104,108,9076,1,2,0:2:0:0:
94 | 257,72,9384,2,0,L|321:48,1,65,2|8,0:2|0:0,0:0:0:0:
95 | 388,17,9692,6,0,P|353:69|367:130,1,130,4|2,0:0|0:3,0:0:0:0:
96 | 405,199,10153,2,0,L|443:267,1,65,8|0,0:0|0:0,0:0:0:0:
97 | 361,278,10461,2,0,L|321:344,1,65,2|0,0:2|0:0,0:0:0:0:
98 | 270,279,10769,2,0,L|192:277,1,65,8|0,0:0|0:0,0:0:0:0:
99 | 173,206,11076,6,0,L|108:205,2,65,2|0|8,0:2|0:0|0:0,0:0:0:0:
100 | 250,206,11538,2,0,B|252:175|235:152|209:135|209:135|209:67,1,130,2|0,0:2|0:0,0:0:0:0:
101 | 209,12,12000,1,8,0:0:0:0:
102 | 209,12,12153,6,0,B|172:24|172:24|128:12|128:12|85:28,1,130,4|2,0:0|0:3,0:0:0:0:
103 | 68,105,12615,2,0,L|-3:131,1,65,8|0,0:0|0:0,0:0:0:0:
104 | 56,188,12923,2,0,L|43:262,2,65,2|0|8,0:2|0:0|0:0,0:0:0:0:
105 | 85,28,13538,6,0,B|122:36|145:67|146:99|146:99|242:99,1,195,2|2,0:2|0:2,0:0:0:0:
106 | 424,104,14307,2,0,B|462:188,1,65,0|8,0:0|0:0,0:0:0:0:
107 | 389,212,14615,1,2,0:2:0:0:
108 | 389,212,14769,6,0,B|427:296,1,65,8|2,0:0|0:2,0:0:0:0:
109 | 337,275,15076,2,0,B|253:313,1,65,8|2,0:0|0:2,0:0:0:0:
110 | 274,223,15384,1,8,0:0:0:0:
111 | 326,160,15538,1,2,0:2:0:0:
112 | 326,160,15846,5,2,0:2:0:0:
113 | 297,82,16000,2,0,L|344:24,1,65,8|0,0:2|0:0,0:0:0:0:
114 | 215,69,16307,2,0,L|188:-2,1,65,8|0,0:0|0:0,0:0:0:0:
115 | 161,133,16615,1,10,0:0:0:0:
116 | 189,211,16769,1,10,0:0:0:0:
117 | 189,211,17230,6,0,L|223:308,1,97.50000371933,2|0,0:0|0:0,0:0:0:0:
118 | 243,373,17692,2,0,P|251:312|336:281,1,146.250005578995,2|0,0:0|0:3,0:0:0:0:
119 | 317,355,18307,1,2,0:0:0:0:
120 | 317,355,18461,6,0,B|365:355|365:355|420:315,1,97.50000371933,0|2,0:0|0:0,0:0:0:0:
121 | 420,176,19076,2,0,B|372:176|372:176|317:216,1,97.50000371933,2|0,0:0|0:0,0:0:0:0:
122 | 321,278,19538,1,0,0:0:0:0:
123 | 320,277,19692,6,0,P|277:258|257:215,1,97.50000371933,2|0,0:0|0:0,0:0:0:0:
124 | 288,149,20153,2,0,B|268:138|223:139|200:169|200:169|136:170,1,146.250005578995,2|0,0:0|0:0,0:0:0:0:
125 | 77,170,20769,1,2,0:0:0:0:
126 | 77,170,20923,6,0,B|78:217|120:241|143:242|143:242|232:242,1,195.00000743866,0|2,0:0|0:0,0:0:0:0:
127 | 358,169,21846,2,0,L|408:169,1,48.750001859665,2|0,0:0|0:0,0:0:0:0:
128 | 462,121,22153,6,0,P|425:176|453:261,1,146.250005578995,2|0,0:0|0:0,0:0:0:0:
129 | 484,310,22769,2,0,B|467:320|440:327|416:316|416:316|387:327,1,97.50000371933,2|0,0:0|0:0,0:0:0:0:
130 | 324,356,23230,6,0,P|250:350|206:282,1,146.250005578995,2|0,0:0|0:0,0:0:0:0:
131 | 225,224,23846,1,2,0:0:0:0:
132 | 225,224,24000,2,0,L|257:111,1,97.50000371933,0|0,0:0|0:0,0:0:0:0:
133 | 313,91,24461,6,0,B|264:101|264:101|170:64,1,146.250005578995,2|0,0:0|0:0,0:0:0:0:
134 | 107,35,25076,1,2,0:0:0:0:
135 | 107,34,25230,2,0,P|102:90|137:131,1,97.50000371933,2|2,0:0|0:0,0:0:0:0:
136 | 186,173,25692,1,0,0:0:0:0:
137 | 186,173,25846,6,0,L|170:264,2,65.0000024795533,2|0|0,1:2|0:0|0:0,0:0:0:0:
138 | 254,134,26461,2,0,L|238:43,2,65.0000024795533,0|0|0,1:0|0:0|0:0,0:0:0:0:
139 | 319,179,27076,6,0,P|319:247|266:289,2,130,4|8|2,0:0|0:0|0:2,0:0:0:0:
140 | 254,134,27846,1,0,0:0:0:0:
141 | 182,168,28000,1,8,0:0:0:0:
142 | 175,247,28153,6,0,B|176:299|133:334|133:334|175:345,1,130,2|0,0:3|0:0,0:0:0:0:
143 | 240,356,28615,1,8,0:0:0:0:
144 | 291,295,28769,2,0,P|340:261|410:283,1,130,0|0,0:0|0:0,0:0:0:0:
145 | 432,349,29230,1,8,0:0:0:0:
146 | 356,338,29384,6,0,L|336:200,1,130,2|0,0:3|0:0,0:0:0:0:
147 | 360,134,29846,1,8,0:0:0:0:
148 | 413,76,30000,2,0,P|437:133|396:201,1,130,0|0,0:0|0:0,0:0:0:0:
149 | 337,209,30461,1,8,0:0:0:0:
150 | 283,152,30615,6,0,B|268:128|268:128|232:144|196:128|196:128|182:152,1,130,2|2,0:3|0:3,0:0:0:0:
151 | 153,224,31076,1,8,0:0:0:0:
152 | 299,278,31384,2,0,P|366:282|407:176,1,195,2|0,0:2|0:0,0:0:0:0:
153 | 344,132,32000,6,0,B|282:153|282:153|214:122,2,130,4|8|2,0:0|0:0|3:2,0:0:0:0:
154 | 416,103,32769,1,0,0:0:0:0:
155 | 477,150,32923,2,0,L|467:239,1,65,8|2,0:0|0:2,0:0:0:0:
156 | 464,292,33230,6,0,P|443:250|357:231,2,130,2|8|0,0:3|0:0|0:0,0:0:0:0:
157 | 437,366,34000,1,0,3:0:0:0:
158 | 359,380,34153,2,0,L|274:353,1,65,8|2,0:0|0:2,0:0:0:0:
159 | 220,341,34461,6,0,P|281:317|303:238,1,130,4|8,0:0|0:0,0:0:0:0:
160 | 267,191,34923,1,0,0:0:0:0:
161 | 189,192,35076,2,0,B|165:184|165:184|141:192|141:192|113:184|113:184|89:192|89:192|65:184,1,130,2|8,0:3|0:0,0:0:0:0:
162 | 28,114,35538,6,0,B|17:92|17:92|137:110,1,130,2|2,0:3|3:2,0:0:0:0:
163 | 199,108,36000,1,8,0:0:0:0:
164 | 199,108,36153,2,0,L|287:95,1,65,6|0,0:2|0:0,0:0:0:0:
165 | 340,85,36461,2,0,B|348:109|348:109|340:133|340:133|348:161|348:161|340:185|340:185|348:209,1,130,2|0,3:2|0:0,0:0:0:0:
166 | 374,282,36923,6,0,B|273:302|273:302|217:287,1,146.250005578995,4|0,0:0|2:0,0:0:0:0:
167 | 156,268,37538,2,0,P|174:234|237:211,1,97.50000371933,2|2,2:0|2:0,0:0:0:0:
168 | 382,205,38153,2,0,P|425:221|432:329,2,146.250005578995,2|2|2,2:0|2:0|2:0,0:0:0:0:
169 | 231,290,39384,6,0,B|273:302|273:302|374:282,2,146.250005578995,2|2|2,2:0|2:0|2:0,0:0:0:0:
170 | 203,137,40615,2,0,P|260:98|342:134,2,146.250005578995,2|2|2,2:0|2:0|2:0,0:0:0:0:
171 | 158,286,41846,6,0,P|175:334|216:361,2,97.50000371933,2|2|2,2:0|2:0|2:0,0:0:0:0:
172 | 123,133,42769,1,2,2:0:0:0:
173 | 273,179,43076,2,0,B|320:192|320:192|348:232|348:232|405:250,2,146.250005578995,2|2|2,2:0|2:0|2:0,0:0:0:0:
174 | 168,63,44307,6,0,P|86:58|42:114,2,146.250005578995,2|2|2,2:0|2:0|2:0,0:0:0:0:
175 | 208,194,45538,1,8,2:3:0:0:
176 | 206,213,46000,1,8,0:3:0:0:
177 | 204,232,46461,1,4,0:3:0:0:
178 | 202,251,46769,6,0,L|215:314,1,65,4|0,0:0|0:0,0:0:0:0:
179 | 285,279,47076,2,0,L|298:342,1,65,2|0,0:3|0:0,0:0:0:0:
180 | 309,204,47384,2,0,L|372:190,1,65,2|0,0:0|0:0,0:0:0:0:
181 | 337,121,47692,2,0,L|400:107,1,65,2|0,0:3|0:0,0:0:0:0:
182 | 306,48,48000,6,0,L|242:34,1,65,2|0,0:0|0:0,0:0:0:0:
183 | 244,112,48307,2,0,L|180:98,1,65,2|0,0:3|0:0,0:0:0:0:
184 | 129,38,48615,2,0,P|156:98|124:169,1,130,2|2,0:0|0:0,0:0:0:0:
185 | 82,211,49076,1,12,0:0:0:0:
186 | 33,272,49230,6,0,P|41:323|64:349,1,65,0|0,0:0|0:0,0:0:0:0:
187 | 111,284,49538,2,0,P|159:302|193:295,1,65,2|0,0:3|0:0,0:0:0:0:
188 | 160,222,49846,2,0,P|192:224|220:239,1,65,2|0,0:0|0:0,0:0:0:0:
189 | 283,190,50153,2,0,P|296:219|297:251,1,65,2|0,0:3|0:0,0:0:0:0:
190 | 312,328,50461,6,0,L|376:342,1,65,2|0,0:0|0:0,0:0:0:0:
191 | 373,263,50769,2,0,L|437:277,1,65,8|0,0:3|0:0,0:0:0:0:
192 | 488,337,51076,2,0,P|461:277|493:206,1,130,12|2,0:3|0:3,0:0:0:0:
193 | 512,144,51538,1,2,3:2:0:0:
194 | 463,79,51692,6,0,L|398:93,1,65,4|0,2:0|0:0,0:0:0:0:
195 | 380,169,52000,2,0,L|315:183,1,65,12|0,0:3|0:0,0:0:0:0:
196 | 297,259,52307,1,2,3:3:0:0:
197 | 220,276,52461,1,2,0:0:0:0:
198 | 166,217,52615,1,2,0:3:0:0:
199 | 190,140,52769,1,12,0:3:0:0:
200 | 268,122,52923,6,0,L|332:136,1,65,10|2,0:0|0:0,0:0:0:0:
201 | 351,212,53230,2,0,L|415:226,1,65,8|2,0:3|0:0,0:0:0:0:
202 | 434,302,53538,1,10,0:0:0:0:
203 | 377,356,53692,1,12,0:3:0:0:
204 | 301,333,53846,1,2,0:3:0:0:
205 | 282,255,54000,1,2,0:3:0:0:
206 | 204,232,54153,6,0,B|160:220|124:232|124:232|36:292|120:384|208:296|124:232|124:232|44:176|108:100,1,455,12|2,0:3|2:0,0:0:0:0:
207 | 300,36,55692,6,0,P|364:20|436:40,2,130
208 | 212,164,56692,6,0,B|200:249|200:249|219:303,1,130,4|8,0:2|0:0,0:0:0:0:
209 | 247,361,57192,1,0,0:0:0:0:
210 | 247,361,57358,2,0,P|322:359|365:311,1,130,2|8,0:3|0:0,0:0:0:0:
211 | 400,256,57858,6,0,L|434:194,1,65,2|0,0:2|0:0,0:0:0:0:
212 | 379,139,58192,2,0,L|345:201,1,65,2|8,0:2|0:0,0:0:0:0:
213 | 309,263,58525,2,0,B|256:285|214:250|214:250|168:250,1,130,2|2,0:2|0:3,0:0:0:0:
214 | 107,253,59025,1,8,0:0:0:0:
215 | 56,105,59358,6,0,B|116:82|116:82|190:97,1,130,2|8,0:2|0:0,0:0:0:0:
216 | 256,114,59858,1,0,0:0:0:0:
217 | 332,96,60025,2,0,B|396:82|396:82,2,65,2|0|8,0:3|0:0|0:0,0:0:0:0:
218 | 310,171,60525,6,0,P|289:250|336:298,1,130,2|2,0:3|0:2,0:0:0:0:
219 | 388,299,61025,1,8,0:0:0:0:
220 | 388,299,61191,2,0,L|462:311,1,65,0|2,0:0|0:3,0:0:0:0:
221 | 438,231,61525,2,0,L|479:180,1,65,2|8,0:2|0:0,0:0:0:0:
222 | 404,153,61858,1,0,0:0:0:0:
223 | 404,153,62025,6,0,P|379:100|305:75,2,130,4|8|2,0:0|0:0|0:2,0:0:0:0:
224 | 354,221,62858,2,0,L|312:272,1,65,0|8,0:0|0:0,0:0:0:0:
225 | 237,252,63191,1,2,0:3:0:0:
226 | 237,252,63358,6,0,L|195:302,1,65,2|0,0:2|0:0,0:0:0:0:
227 | 120,282,63691,2,0,L|78:332,1,65,8|0,0:0|0:0,0:0:0:0:
228 | 60,230,64025,2,0,P|44:177|86:109,1,130,2|8,0:2|0:0,0:0:0:0:
229 | 149,83,64525,1,2,0:3:0:0:
230 | 149,83,64691,6,0,P|179:77|236:100,1,65,2|0,0:2|0:0,0:0:0:0:
231 | 242,12,65025,2,0,P|267:28|291:85,1,65,8|2,0:0|0:2,0:0:0:0:
232 | 357,27,65358,2,0,P|363:56|340:113,1,65,2|2,0:2|0:2,0:0:0:0:
233 | 427,118,65691,2,0,P|410:143|353:167,1,65,8|2,0:0|0:2,0:0:0:0:
234 | 412,231,66025,6,0,P|382:237|325:214,1,65,4|0,0:2|0:0,0:0:0:0:
235 | 304,165,66358,2,0,P|272:158|240:164,1,65,8|2,0:0|3:2,0:0:0:0:
236 | 195,228,66691,2,0,L|149:238,2,32.5,2|0|0,3:3|3:0|3:0,0:0:0:0:
237 | 272,237,67025,2,0,L|318:247,2,32.5,8|0|2,3:1|3:0|3:0,0:0:0:0:
238 | 226,300,67358,6,0,B|160:316|160:316|114:307|95:271,1,130,4|8,0:0|0:0,0:0:0:0:
239 | 90,210,67858,1,0,0:0:0:0:
240 | 90,209,68025,2,0,B|69:118|69:118|131:127,1,130,2|8,0:3|0:0,0:0:0:0:
241 | 181,136,68525,6,0,L|260:149,1,65,2|2,0:2|3:3,0:0:0:0:
242 | 298,89,68858,2,0,L|377:102,1,65,0|8,0:0|0:0,0:0:0:0:
243 | 415,42,69191,2,0,P|438:78|412:162,1,130,0|2,0:0|0:2,0:0:0:0:
244 | 340,175,69691,1,8,0:0:0:0:
245 | 181,136,70025,6,0,P|158:172|184:256,1,130,2|8,0:2|0:0,0:0:0:0:
246 | 247,289,70525,1,0,0:0:0:0:
247 | 313,248,70691,2,0,L|392:292,2,65,2|0|8,0:2|0:0|0:0,0:0:0:0:
248 | 310,170,71191,6,0,B|317:115|272:86|272:86|222:87,1,130,2|0,0:2|0:0,0:0:0:0:
249 | 166,59,71691,1,8,0:0:0:0:
250 | 166,59,71858,2,0,L|97:59,1,65,2|2,0:2|0:3,0:0:0:0:
251 | 120,134,72191,1,2,3:0:0:0:
252 | 120,134,72358,2,0,L|47:177,1,65,8|2,0:0|0:3,0:0:0:0:
253 | 110,229,72691,6,0,P|125:296|186:322,2,130,4|8|2,0:0|0:0|0:3,0:0:0:0:
254 | 162,170,73525,1,0,0:0:0:0:
255 | 214,110,73691,2,0,L|300:108,1,65,8|2,0:0|0:3,0:0:0:0:
256 | 341,61,74025,6,0,P|318:97|344:181,2,130,4|8|2,0:0|0:0|0:3,0:0:0:0:
257 | 407,19,74858,1,0,0:0:0:0:
258 | 476,55,75025,2,0,L|515:137,1,65,8|2,0:0|0:3,0:0:0:0:
259 | 452,172,75358,6,0,L|491:254,1,65,2|0,0:2|0:0,0:0:0:0:
260 | 404,252,75691,1,8,0:0:0:0:
261 | 404,252,75858,2,0,L|352:326,1,65,2|2,0:2|0:3,0:0:0:0:
262 | 310,250,76191,1,2,2:0:0:0:
263 | 310,250,76358,2,0,L|219:242,1,65,8|2,0:0|0:2,0:0:0:0:
264 | 167,239,76691,5,8,0:0:0:0:
265 | 132,168,76858,1,0,0:0:0:0:
266 | 53,162,77025,1,8,0:0:0:0:
267 | 8,227,77191,1,0,0:0:0:0:
268 | 40,298,77358,2,0,L|-7:366,1,65,8|0,0:0|0:0,0:0:0:0:
269 | 117,305,77691,2,0,L|151:381,1,65,8|0,0:0|0:0,0:0:0:0:
270 | 167,239,78025,6,0,L|250:246,2,65,2|8|4,0:3|0:3|0:3,0:0:0:0:
271 | 132,168,78525,2,0,L|48:175,2,65,2|8|4,0:3|0:3|0:3,0:0:0:0:
272 | 167,97,79025,1,4,0:0:0:0:
273 | 256,192,79108,12,0,80691,0:0:0:0:
274 |
--------------------------------------------------------------------------------
/slider/example_data/beatmaps/AKINO from bless4 & CHiCO with HoneyWorks - MIIRO vs. Ai no Scenario (monstrata) [Normal].osu:
--------------------------------------------------------------------------------
1 | osu file format v14
2 |
3 | [General]
4 | AudioFilename: tatoe.mp3
5 | AudioLeadIn: 0
6 | PreviewTime: 6538
7 | Countdown: 0
8 | SampleSet: Soft
9 | StackLeniency: 0.7
10 | Mode: 0
11 | LetterboxInBreaks: 0
12 | WidescreenStoryboard: 0
13 |
14 | [Editor]
15 | DistanceSpacing: 1
16 | BeatDivisor: 4
17 | GridSize: 4
18 | TimelineZoom: 1.8
19 |
20 | [Metadata]
21 | Title:MIIRO vs. Ai no Scenario
22 | TitleUnicode:海色 vs. アイのシナリオ
23 | Artist:AKINO from bless4 & CHiCO with HoneyWorks
24 | ArtistUnicode:AKINO from bless4 & CHiCO with HoneyWorks
25 | Creator:monstrata
26 | Version:Normal
27 | Source:
28 | Tags:kyshiro sukinathan ktgster pishifat smoothie world walaowey toybot sheela901 yuii- Sharkie みいろ tv size opening kantai collection kancolle fleet girls magic kaito 1412 まじっく快斗1412 艦隊これくしょん -艦これ-
29 | BeatmapID:729927
30 | BeatmapSetID:325158
31 |
32 | [Difficulty]
33 | HPDrainRate:4
34 | CircleSize:3
35 | OverallDifficulty:4.5
36 | ApproachRate:5.4
37 | SliderMultiplier:0.95
38 | SliderTickRate:1
39 |
40 | [Events]
41 | //Background and Video events
42 | 0,0,"miiro_no_scenario.png",0,0
43 | //Break Periods
44 | //Storyboard Layer 0 (Background)
45 | //Storyboard Layer 1 (Fail)
46 | //Storyboard Layer 2 (Pass)
47 | //Storyboard Layer 3 (Foreground)
48 | //Storyboard Sound Samples
49 |
50 | [TimingPoints]
51 | 0,307.692307692308,4,2,1,60,1,0
52 | 1076,-100,4,2,1,60,0,0
53 | 3692,-100,4,1,1,60,0,0
54 | 4923,-100,4,1,1,60,0,0
55 | 7230,-100,4,1,1,60,0,0
56 | 17230,-100,4,2,1,45,0,0
57 | 27076,-100,4,1,1,60,0,0
58 | 36923,-100,4,2,1,45,0,0
59 | 46769,-100,4,2,1,60,0,0
60 | 55692,333.333333333333,4,2,1,45,1,0
61 | 56692,333.333333333333,4,1,1,70,1,1
62 | 66025,-105.263157894737,4,1,1,70,0,1
63 | 67275,-100,4,2,1,70,0,0
64 | 67358,-100,4,1,1,70,0,1
65 | 79025,-100,4,1,1,50,0,0
66 |
67 |
68 | [Colours]
69 | Combo1 : 0,64,128
70 | Combo2 : 0,255,255
71 | Combo3 : 128,0,255
72 | Combo4 : 192,192,192
73 |
74 | [HitObjects]
75 | 271,236,1230,6,0,L|379:272,2,95,6|0|2,0:0|0:0|0:0,0:0:0:0:
76 | 181,204,2153,2,0,L|125:222,1,47.5,0|0,0:0|0:0,0:0:0:0:
77 | 90,234,2461,2,0,P|83:288|139:354,2,142.5,2|0|2,0:0|0:0|0:0,0:0:0:0:
78 | 111,141,3692,2,0,B|120:105|120:105|229:74,2,142.5,6|0|2,0:2|0:0|2:2,0:0:0:0:
79 | 90,234,4923,6,0,B|81:274|81:274|15:295|0:338,2,142.5,0|0|0,2:0|2:0|2:0,0:0:0:0:
80 | 182,203,6153,2,0,B|275:164|275:244|367:204,1,190,2|0,2:0|2:0,0:0:0:0:
81 | 490,136,7230,6,0,L|512:284,1,142.5,4|8,0:0|0:0,0:0:0:0:
82 | 435,337,8000,2,0,L|387:374,2,47.5,0|0|8,0:0|0:0|0:0,0:0:0:0:
83 | 421,242,8615,2,0,P|384:215|334:202,1,95,2|8,0:2|0:0,0:0:0:0:
84 | 290,189,9076,2,0,B|274:233|274:233|285:280|285:280|266:323,1,142.5,2|8,0:2|0:0,0:0:0:0:
85 | 246,366,9692,6,0,P|210:327|119:338,1,142.5,4|8,0:0|0:0,0:0:0:0:
86 | 32,347,10461,2,0,L|-10:380,2,47.5,2|0|8,0:2|0:0|0:0,0:0:0:0:
87 | 67,259,11076,2,0,L|103:172,1,95,2|8,0:2|0:0,0:0:0:0:
88 | 120,126,11538,2,0,B|192:100|192:152|258:125,1,142.5,2|8,0:2|0:0,0:0:0:0:
89 | 300,103,12153,6,0,L|271:256,1,142.5,4|8,0:0|0:0,0:0:0:0:
90 | 185,279,12923,2,0,L|131:297,2,47.5,2|0|8,0:2|0:0|0:0,0:0:0:0:
91 | 261,338,13538,2,0,L|314:356,2,47.5,2|0|8,0:2|0:0|0:0,0:0:0:0:
92 | 219,362,14000,1,2,0:2:0:0:
93 | 124,350,14307,2,0,B|77:343|77:343|50:298,1,95,0|2,0:0|0:2,0:0:0:0:
94 | 33,258,14769,6,0,P|73:239|97:182,1,95,8|8,0:0|0:0,0:0:0:0:
95 | 182,155,15384,2,0,P|178:199|215:248,1,95,8|0,0:0|0:0,0:0:0:0:
96 | 286,289,16000,1,8,0:2:0:0:
97 | 368,242,16307,1,8,0:0:0:0:
98 | 368,147,16615,2,0,L|333:87,1,47.5,2|2,0:0|0:0,0:0:0:0:
99 | 201,96,17230,6,0,P|215:161|163:234,2,142.5,2|2|0,0:0|0:0|0:3,0:0:0:0:
100 | 121,148,18461,2,0,P|85:207|98:276,2,142.5,0|0|0,0:0|0:0|0:0,0:0:0:0:
101 | 185,225,19692,6,0,B|280:230|280:230|334:271,2,142.5,2|2|0,0:0|0:0|0:0,0:0:0:0:
102 | 134,305,20923,2,0,B|38:299|38:299|-15:259,2,142.5,0|0|2,0:0|0:0|0:0,0:0:0:0:
103 | 217,349,22153,6,0,P|252:371|313:373,2,95,2|2|2,0:0|0:0|0:0,0:0:0:0:
104 | 191,256,23076,2,0,L|130:241,1,47.5,0|2,0:0|0:0,0:0:0:0:
105 | 98,233,23384,2,0,P|66:261|49:319,2,95,0|0|0,0:0|0:0|0:0,0:0:0:0:
106 | 165,165,24307,2,0,L|226:150,1,47.5,0|2,0:0|0:0,0:0:0:0:
107 | 257,142,24615,6,0,B|362:167,2,95,0|0|2,0:0|0:0|0:0,0:0:0:0:
108 | 186,78,25538,2,0,B|133:90,1,47.5,2|0,0:0|0:0,0:0:0:0:
109 | 93,100,25846,5,2,1:2:0:0:
110 | 93,100,27076,5,4,0:0:0:0:
111 | 186,78,27384,1,8,0:0:0:0:
112 | 251,147,27692,2,0,P|249:195|212:248,1,95,2|8,0:2|0:0,0:0:0:0:
113 | 236,282,28153,2,0,B|194:262|194:262|158:295|94:295|57:254,1,190,2|0,0:3|0:0,0:0:0:0:
114 | 35,167,29076,1,0,0:0:0:0:
115 | 129,190,29384,6,0,B|221:165|221:165|275:72,1,190,2|0,0:3|0:0,0:0:0:0:
116 | 324,160,30307,2,0,L|289:220,1,47.5,0|8,0:0|0:0,0:0:0:0:
117 | 277,243,30615,2,0,P|345:248|397:305,1,142.5,2|8,0:3|0:0,0:0:0:0:
118 | 304,337,31384,2,0,L|248:359,2,47.5,2|0|8,0:2|3:0|0:0,0:0:0:0:
119 | 387,383,32000,6,0,P|447:364|460:248,1,190,4|2,0:0|3:2,0:0:0:0:
120 | 407,172,32923,1,8,0:0:0:0:
121 | 330,229,33230,2,0,L|405:310,2,95,2|8|0,0:3|0:0|0:0,0:0:0:0:
122 | 320,134,34153,1,8,0:0:0:0:
123 | 398,80,34461,6,0,P|414:125|406:171,1,95,4|8,0:0|0:0,0:0:0:0:
124 | 492,213,35076,2,0,P|461:248|417:265,1,95,2|8,0:3|0:0,0:0:0:0:
125 | 369,255,35538,2,0,B|350:252|331:231|331:231|289:265|231:246,1,142.5,2|8,0:3|0:0,0:0:0:0:
126 | 192,246,36153,2,0,P|192:179|144:126,1,142.5,6|0,0:2|0:0,0:0:0:0:
127 | 103,213,36923,5,4,0:0:0:0:
128 | 103,213,37538,2,0,L|57:311,1,95,2|2,2:0|2:0,0:0:0:0:
129 | 149,336,38153,2,0,B|240:376|240:300|336:348,1,190,2|0,2:0|0:0,0:0:0:0:
130 | 420,381,39076,1,2,2:0:0:0:
131 | 493,322,39384,6,0,P|490:248|398:194,1,190,2|0,2:0|0:0,0:0:0:0:
132 | 320,249,40307,1,2,2:0:0:0:
133 | 232,211,40615,2,0,B|144:173|144:173|87:189,2,142.5,2|2|2,2:0|2:0|2:0,0:0:0:0:
134 | 309,154,41846,5,2,2:0:0:0:
135 | 309,154,42153,2,0,L|404:85,2,95,2|2|2,2:0|2:0|2:0,0:0:0:0:
136 | 221,115,43076,2,0,B|178:91|130:118|130:118|100:229,1,190,2|0,2:0|0:0,0:0:0:0:
137 | 83,301,44000,1,2,2:0:0:0:
138 | 173,274,44307,6,0,B|232:243|292:281|292:281|369:256,1,190,2|0,2:0|0:0,0:0:0:0:
139 | 443,231,45230,1,2,2:0:0:0:
140 | 461,138,45538,2,0,P|428:92|338:79,2,142.5,8|8|4,2:3|0:3|0:3,0:0:0:0:
141 | 371,168,46769,6,0,B|323:178|323:178|264:155,1,95,4|2,0:0|0:3,0:0:0:0:
142 | 217,89,47384,2,0,P|189:132|207:224,1,142.5,2|0,0:0|0:0,0:0:0:0:
143 | 223,261,48000,2,0,L|324:303,1,95,2|2,0:0|0:3,0:0:0:0:
144 | 372,370,48615,2,0,P|401:326|379:232,1,142.5,2|12,0:0|0:0,0:0:0:0:
145 | 367,197,49230,6,0,L|265:154,1,95,0|2,0:0|0:3,0:0:0:0:
146 | 189,127,49846,2,0,B|156:196|216:196|180:264,1,142.5,2|0,0:0|0:0,0:0:0:0:
147 | 140,289,50461,2,0,P|93:294|51:262,1,95,2|8,0:0|0:3,0:0:0:0:
148 | 22,178,51076,2,0,B|42:134|15:87|15:87|80:80,1,142.5,12|2,0:3|3:2,0:0:0:0:
149 | 256,192,51692,12,10,55230,2:3:0:0:
150 | 163,209,56692,6,0,P|138:254|144:318,1,95,4|8,0:2|0:0,0:0:0:0:
151 | 234,277,57358,2,0,L|286:266,1,47.5,2|0,0:3|0:0,0:0:0:0:
152 | 305,224,57692,2,0,L|357:214,1,47.5,8|2,0:0|0:2,0:0:0:0:
153 | 376,172,58025,2,0,L|475:151,2,95,0|8|0,0:0|0:0|0:0,0:0:0:0:
154 | 290,129,59025,1,8,0:0:0:0:
155 | 210,181,59358,6,0,P|158:181|106:143,1,95,2|8,0:2|0:0,0:0:0:0:
156 | 186,89,60025,2,0,L|229:43,1,47.5,2|0,0:3|0:0,0:0:0:0:
157 | 263,65,60358,2,0,L|324:47,1,47.5,8|2,0:0|0:3,0:0:0:0:
158 | 342,83,60691,2,0,L|435:105,2,95,0|8|2,3:0|0:0|0:3,0:0:0:0:
159 | 273,149,61691,1,8,0:0:0:0:
160 | 294,242,62025,6,0,P|273:279|209:310,1,95,4|8,0:0|0:0,0:0:0:0:
161 | 136,282,62691,2,0,L|84:296,2,47.5,2|0|8,0:2|0:0|0:0,0:0:0:0:
162 | 203,214,63358,2,0,P|224:177|288:146,1,95,2|8,0:2|0:0,0:0:0:0:
163 | 361,174,64025,2,0,L|412:159,2,47.5,2|0|8,0:2|0:0|0:0,0:0:0:0:
164 | 294,242,64691,6,0,P|273:279|128:274,1,190,2|2,0:2|0:2,0:0:0:0:
165 | 73,218,65691,2,0,L|75:150,1,47.5,8|2,0:0|0:2,0:0:0:0:
166 | 76,124,66025,6,0,B|104:116|104:116|132:124|132:124|160:116|160:116|188:124|188:124|216:116|216:116|244:124|244:124|272:116|272:116|300:124|300:124|328:116|328:116|356:108,1,270.749992770195,4|8,0:2|3:1,0:0:0:0:
167 | 428,112,67358,6,0,L|392:211,1,95,4|8,0:0|0:0,0:0:0:0:
168 | 358,289,68025,2,0,L|306:298,1,47.5,2|0,0:3|0:0,0:0:0:0:
169 | 264,305,68358,1,8,0:0:0:0:
170 | 182,258,68691,2,0,P|170:206|188:152,2,95,2|8|2,3:3|0:0|0:3,0:0:0:0:
171 | 265,211,69691,1,8,0:0:0:0:
172 | 347,259,70025,6,0,P|399:271|453:253,1,95,2|8,0:2|0:0,0:0:0:0:
173 | 394,176,70691,2,0,L|361:115,1,47.5,2|0,0:2|0:0,0:0:0:0:
174 | 350,91,71025,1,8,0:0:0:0:
175 | 254,86,71358,2,0,B|251:117|251:117|259:149|259:149|252:179,2,95,2|8|2,0:3|0:0|0:3,0:0:0:0:
176 | 307,6,72358,1,8,0:0:0:0:
177 | 402,11,72691,6,0,L|461:14,2,47.5,4|0|8,0:0|0:0|0:0,0:0:0:0:
178 | 350,91,73358,1,2,0:3:0:0:
179 | 254,86,73691,1,8,0:0:0:0:
180 | 201,166,74025,2,0,L|141:162,2,47.5,4|0|8,0:0|0:0|0:0,0:0:0:0:
181 | 244,251,74691,1,2,0:3:0:0:
182 | 339,256,75025,1,8,0:0:0:0:
183 | 381,339,75358,6,0,P|430:355|488:337,1,95,2|8,0:2|0:0,0:0:0:0:
184 | 510,316,75858,2,0,P|526:251|511:205,1,95,2|2,0:2|2:0,0:0:0:0:
185 | 491,187,76358,1,8,0:0:0:0:
186 | 433,260,76691,2,0,L|369:256,1,47.5,8|0,0:0|0:0,0:0:0:0:
187 | 344,281,77025,2,0,L|280:277,1,47.5,8|0,0:0|0:0,0:0:0:0:
188 | 255,302,77358,1,8,0:0:0:0:
189 | 160,296,77691,1,8,0:0:0:0:
190 | 102,220,78025,6,0,B|77:179|77:179|88:115,1,95,2|4,0:3|0:3,0:0:0:0:
191 | 130,119,78525,2,0,B|174:102|174:102|197:60,1,95,2|4,0:3|0:3,0:0:0:0:
192 | 215,16,79025,1,4,0:0:0:0:
193 | 256,192,79191,12,0,80691,0:0:0:0:
194 |
--------------------------------------------------------------------------------
/slider/example_data/beatmaps/AKINO from bless4 & CHiCO with HoneyWorks - MIIRO vs. Ai no Scenario (monstrata) [Super Beginner].osu:
--------------------------------------------------------------------------------
1 | osu file format v14
2 |
3 | [General]
4 | AudioFilename: tatoe.mp3
5 | AudioLeadIn: 0
6 | PreviewTime: 6538
7 | Countdown: 0
8 | SampleSet: Soft
9 | StackLeniency: 0.7
10 | Mode: 0
11 | LetterboxInBreaks: 0
12 | WidescreenStoryboard: 0
13 |
14 | [Editor]
15 | DistanceSpacing: 1
16 | BeatDivisor: 4
17 | GridSize: 4
18 | TimelineZoom: 1.8
19 |
20 | [Metadata]
21 | Title:MIIRO vs. Ai no Scenario
22 | TitleUnicode:海色 vs. アイのシナリオ
23 | Artist:AKINO from bless4 & CHiCO with HoneyWorks
24 | ArtistUnicode:AKINO from bless4 & CHiCO with HoneyWorks
25 | Creator:monstrata
26 | Version:Super Beginner
27 | Source:
28 | Tags:kyshiro sukinathan ktgster pishifat smoothie world walaowey toybot sheela901 yuii- Sharkie みいろ tv size opening kantai collection kancolle fleet girls magic kaito 1412 まじっく快斗1412 艦隊これくしょん -艦これ-
29 | BeatmapID:722514
30 | BeatmapSetID:325158
31 |
32 | [Difficulty]
33 | HPDrainRate:1
34 | CircleSize:2.5
35 | OverallDifficulty:1
36 | ApproachRate:1
37 | SliderMultiplier:0.600000005960464
38 | SliderTickRate:1
39 |
40 | [Events]
41 | //Background and Video events
42 | 0,0,"miiro_no_scenario.png",0,0
43 | //Break Periods
44 | //Storyboard Layer 0 (Background)
45 | //Storyboard Layer 1 (Fail)
46 | //Storyboard Layer 2 (Pass)
47 | //Storyboard Layer 3 (Foreground)
48 | //Storyboard Sound Samples
49 |
50 | [TimingPoints]
51 | 0,307.692307692308,4,2,1,60,1,0
52 | 1230,-200,4,2,1,60,0,0
53 | 3692,-200,4,1,1,60,0,0
54 | 17230,-200,4,2,1,45,0,0
55 | 27076,-200,4,1,1,60,0,0
56 | 36923,-200,4,2,1,45,0,0
57 | 46769,-200,4,2,1,60,0,0
58 | 55692,333.333333333333,4,2,1,45,1,0
59 | 56692,333.333333333333,4,2,1,70,1,1
60 | 56692,-200,4,2,1,70,0,1
61 | 67275,-200,4,2,1,70,0,0
62 | 67358,-200,4,2,1,70,0,1
63 | 79025,-100,4,2,1,50,0,0
64 |
65 |
66 | [Colours]
67 | Combo1 : 0,64,128
68 | Combo2 : 0,255,255
69 | Combo3 : 128,0,255
70 | Combo4 : 192,192,192
71 |
72 | [HitObjects]
73 | 56,268,1230,6,0,B|119:246|168:294|168:294|253:229|296:336|397:274,1,360.000003576279,6|2,0:0|2:0,0:0:0:0:
74 | 268,88,7230,6,0,B|185:88|185:88|150:128|150:128|101:92|46:115,2,240.000002384186,4|6|6,0:0|0:0|0:0,0:0:0:0:
75 | 352,193,13538,1,2,0:0:0:0:
76 | 239,235,14769,6,0,B|176:265|136:206|136:206|149:147,1,180.000001788139,8|8,0:0|0:0,0:0:0:0:
77 | 165,88,17230,6,0,P|221:69|283:84,1,120.000001192093,2|0,0:0|0:0,0:0:0:0:
78 | 341,183,19692,2,0,B|288:210|225:188|225:188|165:209,1,180.000001788139,2|0,0:0|0:0,0:0:0:0:
79 | 112,231,22153,6,0,B|80:295|133:338|133:338|197:338,2,180.000001788139,2|0|6,0:0|0:0|0:0,0:0:0:0:
80 | 199,149,27076,6,0,B|254:121|254:121|331:189|420:139,2,240.000002384186,4|0|6,0:0|0:0|0:0,0:0:0:0:
81 | 94,207,33230,1,2,0:0:0:0:
82 | 92,325,34461,2,0,B|136:321|170:302|191:267|191:267|315:268,1,240.000002384186,6|4,0:0|0:0,0:0:0:0:
83 | 429,246,38153,6,0,B|420:184|359:157|359:157|236:156,2,240.000002384186,2|2|2,2:0|2:0|2:0,0:0:0:0:
84 | 311,267,44307,2,0,L|191:267|191:267,1,120.000001192093,2|10,2:0|2:0,0:0:0:0:
85 | 125,370,46769,6,0,P|72:280|124:166,1,240.000002384186,6|0,0:0|0:0,0:0:0:0:
86 | 184,165,49846,2,0,P|266:193|353:164,1,180.000001788139,2|4,0:0|2:0,0:0:0:0:
87 | 256,192,51846,12,0,55230,2:0:0:0:
88 | 255,191,56692,22,0,P|196:177|141:191,1,120.000001192093,6|0,0:0|0:0,0:0:0:0:
89 | 198,297,59358,2,0,P|257:311|312:297,1,120.000001192093,2|0,0:0|0:0,0:0:0:0:
90 | 399,214,62025,6,0,B|421:149|371:105|371:105|312:136|256:108,1,240.000002384186,4|4,0:0|0:2,0:0:0:0:
91 | 151,48,66025,1,2,0:0:0:0:
92 | 46,109,67358,6,0,B|46:169|46:169|78:224,1,120.000001192093,4|0,0:0|0:0,0:0:0:0:
93 | 190,258,70025,2,0,B|190:198|190:198|158:143,1,120.000001192093,2|0,0:0|0:0,0:0:0:0:
94 | 76,220,72691,6,0,P|82:306|209:376,1,240.000002384186,4|6,0:0|0:0,0:0:0:0:
95 | 315,326,76691,2,0,L|425:275,1,120.000001192093,8|6,0:0|0:0,0:0:0:0:
96 |
--------------------------------------------------------------------------------
/slider/example_data/beatmaps/AKINO from bless4 & CHiCO with HoneyWorks - MIIRO vs. Ai no Scenario (monstrata) [Ultra Beginner].osu:
--------------------------------------------------------------------------------
1 | osu file format v14
2 |
3 | [General]
4 | AudioFilename: tatoe.mp3
5 | AudioLeadIn: 0
6 | PreviewTime: 6538
7 | Countdown: 0
8 | SampleSet: Soft
9 | StackLeniency: 0.7
10 | Mode: 0
11 | LetterboxInBreaks: 0
12 | WidescreenStoryboard: 0
13 |
14 | [Editor]
15 | DistanceSpacing: 1.7
16 | BeatDivisor: 4
17 | GridSize: 8
18 | TimelineZoom: 0.9999999
19 |
20 | [Metadata]
21 | Title:MIIRO vs. Ai no Scenario
22 | TitleUnicode:海色 vs. アイのシナリオ
23 | Artist:AKINO from bless4 & CHiCO with HoneyWorks
24 | ArtistUnicode:AKINO from bless4 & CHiCO with HoneyWorks
25 | Creator:monstrata
26 | Version:Ultra Beginner
27 | Source:
28 | Tags:kyshiro sukinathan ktgster pishifat smoothie world walaowey toybot sheela901 yuii- Sharkie みいろ tv size opening kantai collection kancolle fleet girls magic kaito 1412 まじっく快斗1412 艦隊これくしょん -艦これ-
29 | BeatmapID:741477
30 | BeatmapSetID:325158
31 |
32 | [Difficulty]
33 | HPDrainRate:0
34 | CircleSize:2
35 | OverallDifficulty:0
36 | ApproachRate:0
37 | SliderMultiplier:0.400000005960464
38 | SliderTickRate:1
39 |
40 | [Events]
41 | //Background and Video events
42 | 0,0,"miiro_no_scenario.png",0,0
43 | //Break Periods
44 | //Storyboard Layer 0 (Background)
45 | //Storyboard Layer 1 (Fail)
46 | //Storyboard Layer 2 (Pass)
47 | //Storyboard Layer 3 (Foreground)
48 | //Storyboard Sound Samples
49 |
50 | [TimingPoints]
51 | 0,307.692307692308,4,2,1,60,1,0
52 | 1230,-300,4,2,1,60,0,0
53 | 3692,-300,4,1,1,60,0,0
54 | 17230,-300,4,2,1,45,0,0
55 | 27076,-300,4,1,1,60,0,0
56 | 36923,-300,4,2,1,45,0,0
57 | 46769,-300,4,2,1,60,0,0
58 | 55692,333.333333333333,4,2,1,45,1,0
59 | 56692,333.333333333333,4,2,1,70,1,1
60 | 56692,-300,4,2,1,70,0,1
61 | 67275,-300,4,2,1,70,0,0
62 | 67358,-300,4,2,1,70,0,1
63 | 78025,-300,4,2,1,70,0,0
64 | 79025,-300,4,2,1,50,0,0
65 |
66 |
67 | [Colours]
68 | Combo1 : 0,64,128
69 | Combo2 : 0,255,255
70 | Combo3 : 128,0,255
71 | Combo4 : 192,192,192
72 |
73 | [HitObjects]
74 | 93,237,1230,6,0,P|129:301|209:309,1,160.000002384186,6|2,0:0|2:0,0:0:0:0:
75 | 358,227,7230,6,0,B|320:128|320:128|265:108|222:151|222:151|149:162|129:103,1,326.666671534379,4|8,0:0|0:0,0:0:0:0:
76 | 97,20,16000,1,4,0:2:0:0:
77 | 186,34,17230,6,0,B|177:72|152:97|116:107|116:107|116:214|116:214|208:208|254:146,1,373.333338896433,2|6,0:0|0:0,0:0:0:0:
78 | 293,63,27076,6,0,B|328:82|347:117|342:151|342:151|448:151,2,213.333336512247,4|6|4,0:0|0:0|0:0,0:0:0:0:
79 | 254,146,38153,6,0,B|249:185|273:220|304:232|304:232|304:339|304:339,1,213.333336512247,2|2,2:0|2:0,0:0:0:0:
80 | 213,336,44307,6,0,B|108:336|108:336|46:303|79:245|79:245,1,213.333336512247,2|0,2:0|0:0,0:0:0:0:
81 | 139,176,50461,1,2,0:0:0:0:
82 | 256,192,51692,12,0,55230,2:0:0:0:
83 | 256,192,56692,6,0,B|236:218|235:261|253:292|253:292|216:339|155:320,2,213.333336512247,6|4|4,0:0|0:0|0:0,0:0:0:0:
84 | 330,242,68691,1,2,0:2:0:0:
85 | 386,313,70025,2,0,P|417:256|386:171,2,160.000002384186,2|4|6,0:0|0:0|0:0,0:0:0:0:
86 |
--------------------------------------------------------------------------------
/slider/example_data/beatmaps/AKINO from bless4 & CHiCO with HoneyWorks - MIIRO vs. Ai no Scenario (monstrata) [Walao's Advanced].osu:
--------------------------------------------------------------------------------
1 | osu file format v14
2 |
3 | [General]
4 | AudioFilename: tatoe.mp3
5 | AudioLeadIn: 0
6 | PreviewTime: 6538
7 | Countdown: 0
8 | SampleSet: Soft
9 | StackLeniency: 0.7
10 | Mode: 0
11 | LetterboxInBreaks: 0
12 | WidescreenStoryboard: 0
13 |
14 | [Editor]
15 | DistanceSpacing: 1.5
16 | BeatDivisor: 4
17 | GridSize: 4
18 | TimelineZoom: 1.8
19 |
20 | [Metadata]
21 | Title:MIIRO vs. Ai no Scenario
22 | TitleUnicode:海色 vs. アイのシナリオ
23 | Artist:AKINO from bless4 & CHiCO with HoneyWorks
24 | ArtistUnicode:AKINO from bless4 & CHiCO with HoneyWorks
25 | Creator:monstrata
26 | Version:Walao's Advanced
27 | Source:
28 | Tags:kyshiro sukinathan ktgster pishifat smoothie world walaowey toybot sheela901 yuii- Sharkie みいろ tv size opening kantai collection kancolle fleet girls magic kaito 1412 まじっく快斗1412 艦隊これくしょん -艦これ-
29 | BeatmapID:724337
30 | BeatmapSetID:325158
31 |
32 | [Difficulty]
33 | HPDrainRate:4.5
34 | CircleSize:3.5
35 | OverallDifficulty:5.3
36 | ApproachRate:6.8
37 | SliderMultiplier:1.4
38 | SliderTickRate:1
39 |
40 | [Events]
41 | //Background and Video events
42 | 0,0,"miiro_no_scenario.png",0,0
43 | //Break Periods
44 | //Storyboard Layer 0 (Background)
45 | //Storyboard Layer 1 (Fail)
46 | //Storyboard Layer 2 (Pass)
47 | //Storyboard Layer 3 (Foreground)
48 | //Storyboard Sound Samples
49 |
50 | [TimingPoints]
51 | 0,307.692307692308,4,2,1,60,1,0
52 | 1538,-133.333333333333,4,2,1,60,0,0
53 | 3692,-133.333333333333,4,1,1,60,0,0
54 | 7230,-100,4,1,1,60,0,0
55 | 17230,-133.333333333333,4,2,1,45,0,0
56 | 27076,-100,4,1,1,60,0,0
57 | 36923,-133.333333333333,4,2,1,45,0,0
58 | 46769,-100,4,2,1,60,0,0
59 | 55692,333.333333333333,4,2,1,45,1,0
60 | 56692,333.333333333333,4,1,1,70,1,1
61 | 67275,-100,4,2,1,70,0,1
62 | 67358,-100,4,1,1,70,0,1
63 | 79025,-100,4,1,1,50,0,0
64 |
65 |
66 | [Colours]
67 | Combo1 : 0,64,128
68 | Combo2 : 0,255,255
69 | Combo3 : 128,0,255
70 | Combo4 : 192,192,192
71 |
72 | [HitObjects]
73 | 120,96,1230,5,6,0:0:0:0:
74 | 120,96,1538,2,0,P|181:62|232:65,1,105.000004005432,0|2,0:0|0:0,0:0:0:0:
75 | 319,179,2153,2,0,B|322:248,1,52.5000020027161,0|0,0:0|0:0,0:0:0:0:
76 | 262,283,2461,6,0,P|186:290|142:229,2,157.500006008148,2|0|2,0:0|0:0|0:0,0:0:0:0:
77 | 184,146,3692,6,0,P|99:146|49:213,2,157.500006008148,6|0|2,0:2|0:0|2:2,0:0:0:0:
78 | 256,192,4923,12,0,6769,2:0:0:0:
79 | 293,96,7230,38,0,P|362:96|405:169,1,140,4|2,0:0|0:3,0:0:0:0:
80 | 399,232,7692,2,0,L|324:290,1,70,8|0,0:0|0:0,0:0:0:0:
81 | 267,237,8000,2,0,L|342:179,1,70,0|0,0:0|0:0,0:0:0:0:
82 | 247,156,8307,2,0,L|172:214,1,70,8|0,0:0|0:0,0:0:0:0:
83 | 156,275,8615,6,0,L|156:345,2,70,2|0|8,0:2|0:0|0:0,0:0:0:0:
84 | 107,206,9076,2,0,P|74:151|3:93,1,140,2|2,0:2|0:2,0:0:0:0:
85 | 72,36,9538,1,8,0:0:0:0:
86 | 149,70,9692,6,0,P|208:93|285:74,1,140,4|2,0:0|0:3,0:0:0:0:
87 | 363,94,10153,2,0,P|383:148|389:191,1,70,8|0,0:0|0:0,0:0:0:0:
88 | 301,143,10461,2,0,P|288:110|280:76,1,70,2|0,0:2|0:0,0:0:0:0:
89 | 337,14,10769,2,0,P|376:12|412:26,1,70,8|0,0:0|0:0,0:0:0:0:
90 | 447,95,11077,6,0,B|486:159|500:194|500:194|472:227,1,140,2|8,0:2|0:0,0:0:0:0:
91 | 432,283,11538,1,2,0:2:0:0:
92 | 267,241,11846,2,0,L|188:241,1,70,0|8,0:0|0:0,0:0:0:0:
93 | 274,156,12154,6,0,P|330:186|347:264,1,140,4|2,0:0|0:3,0:0:0:0:
94 | 302,318,12615,2,0,L|231:318,1,70,8|0,0:0|0:0,0:0:0:0:
95 | 267,241,12923,2,0,L|205:205,1,70,2|0,0:2|0:0,0:0:0:0:
96 | 274,156,13230,2,0,L|238:94,1,70,8|0,0:0|0:0,0:0:0:0:
97 | 158,68,13538,6,0,L|80:68,2,70,2|0|8,0:2|0:0|0:0,0:0:0:0:
98 | 221,15,14000,1,2,0:2:0:0:
99 | 300,41,14154,2,0,L|366:13,2,70,2|0|8,0:3|0:0|0:0,0:0:0:0:
100 | 239,95,14615,1,2,0:2:0:0:
101 | 239,95,14769,6,0,P|218:127|207:185,1,70,8|2,0:0|0:2,0:0:0:0:
102 | 252,229,15077,2,0,L|322:229,1,70,8|2,0:0|0:2,0:0:0:0:
103 | 400,259,15384,1,8,0:0:0:0:
104 | 387,342,15538,2,0,P|318:361|246:341,1,140,2|2,0:2|0:2,0:0:0:0:
105 | 183,297,16000,6,0,P|158:258|156:212,1,70,8|0,0:2|0:0,0:0:0:0:
106 | 155,151,16307,2,0,P|168:109|205:77,1,70,8|0,0:0|0:0,0:0:0:0:
107 | 264,62,16615,1,10,0:0:0:0:
108 | 348,60,16769,1,10,0:0:0:0:
109 | 416,236,17231,6,0,P|366:256|296:258,1,105.000004005432,2|0,0:0|0:0,0:0:0:0:
110 | 239,237,17692,2,0,P|197:206|180:152,2,105.000004005432,2|0|2,0:0|0:0|0:0,0:0:0:0:
111 | 298,184,18461,2,0,B|360:146|386:101|386:101|351:92,1,157.500006008148,0|0,0:0|0:0,0:0:0:0:
112 | 119,62,19384,2,0,L|75:111,1,52.5000020027161,0|0,0:0|0:0,0:0:0:0:
113 | 151,144,19692,6,0,P|167:201|160:257,1,105.000004005432,2|0,0:0|0:0,0:0:0:0:
114 | 92,283,20153,2,0,P|76:226|83:167,1,105.000004005432,2|0,0:0|0:0,0:0:0:0:
115 | 231,134,20769,1,2,0:0:0:0:
116 | 171,279,21076,1,2,0:0:0:0:
117 | 153,121,21384,2,0,P|190:66|241:56,1,105.000004005432,0|0,0:0|0:0,0:0:0:0:
118 | 231,134,21846,2,0,L|231:192,1,52.5000020027161,2|0,0:0|0:0,0:0:0:0:
119 | 71,360,22461,6,0,P|24:326|0:266,2,105.000004005432,2|2|0,0:0|0:0|0:0,0:0:0:0:
120 | 143,328,23230,2,0,P|161:256|142:208,1,105.000004005432,2|0,0:0|0:0,0:0:0:0:
121 | 34,139,23846,2,0,P|-4:209|12:302,1,157.500006008148,2|0,0:0|0:0,0:0:0:0:
122 | 77,257,24461,6,0,L|162:180,1,105.000004005432,2|2,0:0|0:0,0:0:0:0:
123 | 280,91,25076,2,0,P|340:86|394:122,1,105.000004005432,2|0,0:0|0:0,0:0:0:0:
124 | 405,180,25538,2,0,L|401:240,1,52.5000020027161,2|0,0:0|0:0,0:0:0:0:
125 | 400,311,25846,6,0,L|448:376,2,70.0000026702882,2|0|0,1:2|0:0|0:0,0:0:0:0:
126 | 319,243,26461,2,0,L|271:178,2,70.0000026702882,0|0|0,1:0|0:0|0:0,0:0:0:0:
127 | 209,263,27076,5,4,0:0:0:0:
128 | 66,173,27384,2,0,P|89:104|146:58,1,140,8|2,0:0|0:2,0:0:0:0:
129 | 305,93,28000,1,8,0:0:0:0:
130 | 369,147,28153,6,0,P|387:219|367:307,1,140,2|0,0:3|0:0,0:0:0:0:
131 | 218,315,28768,2,0,P|166:271|161:204,1,140,0|0,0:0|0:0,0:0:0:0:
132 | 210,133,29230,1,8,0:0:0:0:
133 | 294,136,29384,6,0,P|332:72|316:11,1,140,2|0,0:3|0:0,0:0:0:0:
134 | 156,63,29999,2,0,P|123:121|144:191,1,140,0|0,0:0|0:0,0:0:0:0:
135 | 210,133,30461,1,8,0:0:0:0:
136 | 210,133,30615,6,0,L|63:116,1,140,2|2,0:3|0:3,0:0:0:0:
137 | 72,200,31076,1,8,0:0:0:0:
138 | 230,255,31384,2,0,P|302:219|331:157,1,140,2|8,0:2|0:0,0:0:0:0:
139 | 171,114,32000,6,0,P|98:149|69:211,1,140,4|8,0:0|0:0,0:0:0:0:
140 | 206,300,32615,2,0,P|271:333|346:312,1,140,2|8,3:2|0:0,0:0:0:0:
141 | 450,198,33230,6,0,P|448:117|402:50,1,140,2|8,0:3|0:0,0:0:0:0:
142 | 335,65,33692,1,0,0:0:0:0:
143 | 265,112,33846,2,0,P|195:135|117:115,1,140,0|8,0:0|0:0,0:0:0:0:
144 | 70,65,34306,1,2,0:2:0:0:
145 | 70,65,34461,6,0,P|51:144|99:201,1,140,4|8,0:0|0:0,0:0:0:0:
146 | 227,271,35076,2,0,L|319:271,2,70,2|2|8,0:3|0:2|0:0,0:0:0:0:
147 | 146,248,35538,6,0,P|125:171|167:115,1,140,2|2,0:3|3:2,0:0:0:0:
148 | 207,190,35999,1,8,0:0:0:0:
149 | 227,271,36153,1,6,0:2:0:0:
150 | 67,325,36461,2,0,B|48:303|48:303|46:282|46:282|37:268|37:268|39:244|39:244|32:220|32:220|38:197|38:197,1,140,2|0,3:2|0:0,0:0:0:0:
151 | 59,120,36923,5,4,0:0:0:0:
152 | 309,85,37538,2,0,P|360:70|413:79,1,105.000004005432,2|2,2:0|2:0,0:0:0:0:
153 | 371,198,38153,2,0,P|356:287|289:321,2,157.500006008148,2|2|2,2:0|2:0|2:0,0:0:0:0:
154 | 251,157,39384,6,0,B|169:240|169:240|208:260,2,157.500006008148,2|2|2,2:0|2:0|2:0,0:0:0:0:
155 | 180,52,40615,2,0,P|255:30|328:56,2,157.500006008148,2|2|2,2:0|2:0|2:0,0:0:0:0:
156 | 251,157,41846,5,2,2:0:0:0:
157 | 375,138,42153,2,0,P|417:94|434:33,1,105.000004005432,2|2,2:0|2:0,0:0:0:0:
158 | 308,28,42768,1,2,2:0:0:0:
159 | 232,127,43076,2,0,B|245:178|229:206|211:233|239:303,2,157.500006008148,2|2|2,2:0|2:0|2:0,0:0:0:0:
160 | 130,52,44306,5,2,2:0:0:0:
161 | 61,228,44768,1,2,2:0:0:0:
162 | 208,346,45230,1,2,2:0:0:0:
163 | 285,246,45538,2,0,P|258:174|201:223,2,157.500006008148,8|8|4,2:3|0:3|0:3,0:0:0:0:
164 | 162,276,46768,5,4,0:0:0:0:
165 | 122,202,46922,2,0,P|108:163|132:112,1,70,0|2,0:0|0:3,0:0:0:0:
166 | 167,70,47230,1,0,0:0:0:0:
167 | 247,92,47384,2,0,P|328:104|385:76,1,140,2|2,0:0|0:3,0:0:0:0:
168 | 456,114,47845,1,0,0:0:0:0:
169 | 456,114,47999,6,0,P|439:151|443:178,1,70,2|0,0:0|0:0,0:0:0:0:
170 | 412,257,48306,1,2,0:3:0:0:
171 | 287,144,48615,2,0,P|270:106|247:92,1,70,2|4,0:0|2:0,0:0:0:0:
172 | 119,165,49076,2,0,L|145:230,1,70,12|0,0:0|0:0,0:0:0:0:
173 | 183,306,49384,2,0,L|158:378,2,70,0|2|0,0:0|0:3|0:0,0:0:0:0:
174 | 251,256,49845,2,0,P|275:201|259:109,1,140,2|2,0:0|0:3,0:0:0:0:
175 | 190,87,50307,1,0,0:0:0:0:
176 | 105,95,50461,6,0,P|81:127|74:179,1,70,2|0,0:0|0:0,0:0:0:0:
177 | 157,162,50769,1,8,0:3:0:0:
178 | 323,147,51076,2,0,B|402:137|402:137|386:109,2,105,12|0|2,0:3|0:0|3:2,0:0:0:0:
179 | 325,62,51692,6,0,P|361:36|408:38,1,70,4|0,2:0|0:0,0:0:0:0:
180 | 464,64,52000,2,0,P|490:100|488:147,1,70,12|0,0:3|0:0,0:0:0:0:
181 | 467,204,52307,2,0,P|431:230|384:228,1,70,2|2,3:3|0:0,0:0:0:0:
182 | 324,214,52615,2,0,P|298:178|300:131,1,70,2|12,0:3|0:3,0:0:0:0:
183 | 353,89,52923,6,0,P|378:127|377:175,1,70,10|2,0:0|0:0,0:0:0:0:
184 | 406,232,53230,2,0,P|391:265|364:288,1,70,8|2,0:3|0:0,0:0:0:0:
185 | 281,287,53538,2,0,P|255:261|241:228,2,70,10|12|2,0:0|0:3|0:3,0:0:0:0:
186 | 324,214,54000,1,2,0:3:0:0:
187 | 296,134,54153,6,0,P|236:104|143:117,1,140,12|0,0:3|0:3,0:0:0:0:
188 | 143,189,54614,1,10,0:3:0:0:
189 | 167,270,54769,2,0,P|166:310|138:357,1,70,0|6,0:3|0:3,0:0:0:0:
190 | 86,290,55076,2,0,P|65:261|58:229,1,70,2|2,0:0|2:0,0:0:0:0:
191 | 59,229,56692,6,0,B|30:128|30:128|82:126,1,140,4|8,0:2|0:0,0:0:0:0:
192 | 232,109,57359,2,0,P|272:109|308:97,1,70,2|0,0:3|0:0,0:0:0:0:
193 | 349,168,57692,1,8,0:0:0:0:
194 | 268,193,57858,6,0,P|234:184|199:187,1,70,2|0,0:2|0:0,0:0:0:0:
195 | 146,123,58192,2,0,L|156:53,1,70,2|8,0:2|0:0,0:0:0:0:
196 | 241,39,58525,2,0,L|231:109,1,70,2|0,0:2|0:0,0:0:0:0:
197 | 314,97,58858,2,0,L|324:27,1,70,2|8,0:3|0:0,0:0:0:0:
198 | 428,159,59358,6,0,P|410:230|345:269,1,140,2|8,0:2|0:0,0:0:0:0:
199 | 314,97,60025,2,0,P|350:89|403:111,1,70,2|0,0:3|0:0,0:0:0:0:
200 | 347,173,60358,1,8,0:0:0:0:
201 | 262,166,60526,6,0,L|206:123,1,70,2|0,0:3|3:0,0:0:0:0:
202 | 164,51,60858,2,0,P|130:43|96:51,1,70,2|8,0:2|0:0,0:0:0:0:
203 | 56,125,61191,2,0,L|90:192,1,70,0|2,0:0|0:3,0:0:0:0:
204 | 163,226,61525,2,0,P|219:254|274:308,1,140,2|0,0:2|0:0,0:0:0:0:
205 | 322,235,62025,6,0,P|284:184|260:111,1,140,4|8,0:0|0:0,0:0:0:0:
206 | 404,24,62692,2,0,P|438:40|465:87,1,70,2|0,0:2|0:0,0:0:0:0:
207 | 473,148,63026,2,0,P|465:191|429:226,1,70,8|0,0:0|0:0,0:0:0:0:
208 | 401,279,63359,6,0,P|350:321|257:299,1,140,2|0,0:2|0:0,0:0:0:0:
209 | 192,171,64025,2,0,L|237:102,1,70,2|0,0:2|0:0,0:0:0:0:
210 | 278,181,64358,2,0,L|233:250,1,70,8|2,0:0|0:3,0:0:0:0:
211 | 155,246,64691,6,0,P|111:193|124:120,1,140,2|8,0:2|0:0,0:0:0:0:
212 | 273,57,65359,2,0,L|351:57,2,70,2|2|0,0:2|0:2|0:0,0:0:0:0:
213 | 105,44,66026,6,0,P|70:57|45:89,1,70,4|0,0:2|0:0,0:0:0:0:
214 | 31,163,66359,1,8,0:0:0:0:
215 | 68,237,66525,2,0,P|68:265|59:312,1,70,2|2,3:2|3:3,0:0:0:0:
216 | 113,371,66858,1,0,3:0:0:0:
217 | 176,315,67025,2,0,P|179:286|195:241,1,70,8|2,3:1|3:0,0:0:0:0:
218 | 186,163,67359,6,0,P|243:126|311:136,1,140,4|0,0:0|0:0,0:0:0:0:
219 | 406,275,68026,2,0,L|341:315,1,70,2|0,0:3|0:0,0:0:0:0:
220 | 276,265,68359,1,8,0:0:0:0:
221 | 263,184,68526,6,0,P|288:150|325:132,1,70,2|2,0:2|3:3,0:0:0:0:
222 | 272,62,68858,2,0,P|230:57|195:34,1,70,0|8,0:0|0:0,0:0:0:0:
223 | 157,112,69191,2,0,P|173:150|171:191,1,70,0|2,0:0|0:3,0:0:0:0:
224 | 215,253,69525,2,0,P|245:266|282:265,2,70,2|8|2,0:2|0:0|0:3,0:0:0:0:
225 | 130,249,70026,6,0,P|61:241|47:169,1,140,2|0,0:2|0:0,0:0:0:0:
226 | 157,57,70692,2,0,L|228:57,1,70,2|0,0:2|0:0,0:0:0:0:
227 | 302,96,71026,1,8,0:0:0:0:
228 | 356,159,71192,6,0,P|355:202|369:250,1,70,2|2,0:2|0:3,0:0:0:0:
229 | 278,242,71525,2,0,P|278:198|265:151,1,70,0|8,0:0|0:0,0:0:0:0:
230 | 302,96,71859,2,0,P|358:77|433:131,1,140,2|0,0:2|0:0,0:0:0:0:
231 | 418,198,72358,2,0,L|364:241,1,70,8|2,0:0|0:3,0:0:0:0:
232 | 278,242,72692,6,0,B|222:239|222:239|144:286,1,140,4|8,0:0|0:0,0:0:0:0:
233 | 30,165,73358,2,0,L|88:124,1,70,2|0,0:3|0:0,0:0:0:0:
234 | 164,91,73691,2,0,L|235:91,1,70,8|2,0:0|0:3,0:0:0:0:
235 | 317,102,74025,6,0,B|366:131|366:131|389:226,1,140,4|8,0:0|0:0,0:0:0:0:
236 | 265,330,74691,2,0,P|236:310|217:281,1,70,2|0,0:3|0:0,0:0:0:0:
237 | 142,241,75025,2,0,P|119:281|90:302,1,70,8|2,0:0|0:3,0:0:0:0:
238 | 60,222,75358,6,0,P|99:168|194:177,1,140,2|8,0:2|0:0,0:0:0:0:
239 | 225,222,75858,2,0,P|307:214|364:168,1,140,2|2,0:2|2:0,0:0:0:0:
240 | 325,104,76358,1,8,0:0:0:0:
241 | 167,161,76691,6,0,L|145:237,1,70,8|0,0:0|0:0,0:0:0:0:
242 | 230,247,77025,2,0,L|190:314,1,70,8|0,0:0|0:0,0:0:0:0:
243 | 111,306,77358,2,0,P|71:310|11:298,1,70,8|0,0:0|0:0,0:0:0:0:
244 | 78,227,77691,2,0,P|112:223|147:227,1,70,8|0,0:0|0:0,0:0:0:0:
245 | 223,190,78025,6,0,P|240:157|245:121,1,70,2|8,0:3|0:3,0:0:0:0:
246 | 321,89,78358,1,4,0:3:0:0:
247 | 321,89,78525,2,0,P|327:125|346:156,1,70,2|8,0:3|0:3,0:0:0:0:
248 | 304,228,78858,1,4,0:3:0:0:
249 | 233,273,79025,5,4,0:0:0:0:
250 | 256,192,79108,12,0,80691,0:0:0:0:
251 |
--------------------------------------------------------------------------------
/slider/example_data/beatmaps/AKINO from bless4 & CHiCO with HoneyWorks - MIIRO vs. Ai no Scenario (monstrata) [Yuistrata's Easy].osu:
--------------------------------------------------------------------------------
1 | osu file format v14
2 |
3 | [General]
4 | AudioFilename: tatoe.mp3
5 | AudioLeadIn: 0
6 | PreviewTime: 6538
7 | Countdown: 0
8 | SampleSet: Soft
9 | StackLeniency: 0.7
10 | Mode: 0
11 | LetterboxInBreaks: 0
12 | WidescreenStoryboard: 0
13 |
14 | [Editor]
15 | DistanceSpacing: 1
16 | BeatDivisor: 4
17 | GridSize: 4
18 | TimelineZoom: 1.8
19 |
20 | [Metadata]
21 | Title:MIIRO vs. Ai no Scenario
22 | TitleUnicode:海色 vs. アイのシナリオ
23 | Artist:AKINO from bless4 & CHiCO with HoneyWorks
24 | ArtistUnicode:AKINO from bless4 & CHiCO with HoneyWorks
25 | Creator:monstrata
26 | Version:Yuistrata's Easy
27 | Source:
28 | Tags:kyshiro sukinathan ktgster pishifat smoothie world walaowey toybot sheela901 yuii- Sharkie みいろ tv size opening kantai collection kancolle fleet girls magic kaito 1412 まじっく快斗1412 艦隊これくしょん -艦これ-
29 | BeatmapID:723197
30 | BeatmapSetID:325158
31 |
32 | [Difficulty]
33 | HPDrainRate:3
34 | CircleSize:3
35 | OverallDifficulty:3
36 | ApproachRate:3.4
37 | SliderMultiplier:0.9
38 | SliderTickRate:1
39 |
40 | [Events]
41 | //Background and Video events
42 | 0,0,"miiro_no_scenario.png",0,0
43 | //Break Periods
44 | 2,4815,5839
45 | //Storyboard Layer 0 (Background)
46 | //Storyboard Layer 1 (Fail)
47 | //Storyboard Layer 2 (Pass)
48 | //Storyboard Layer 3 (Foreground)
49 | //Storyboard Sound Samples
50 |
51 | [TimingPoints]
52 | 0,307.692307692308,4,2,1,60,1,0
53 | 1076,-100,4,2,1,60,0,0
54 | 3692,-100,4,1,1,60,0,0
55 | 7230,-100,4,1,1,60,0,0
56 | 17230,-100,4,2,1,45,0,0
57 | 27076,-100,4,1,1,60,0,0
58 | 36923,-100,4,2,1,45,0,0
59 | 46769,-100,4,2,1,60,0,0
60 | 55692,333.333333333333,4,2,1,45,1,0
61 | 56692,333.333333333333,4,2,1,70,1,1
62 | 67275,-100,4,2,1,70,0,0
63 | 67358,-100,4,2,1,70,0,1
64 | 79025,-100,4,2,1,50,0,0
65 |
66 |
67 | [Colours]
68 | Combo1 : 0,64,128
69 | Combo2 : 0,255,255
70 | Combo3 : 128,0,255
71 | Combo4 : 192,192,192
72 |
73 | [HitObjects]
74 | 37,158,1230,6,0,B|54:115|104:99|149:121|149:121|195:109,1,180,6|0,0:0|0:0,0:0:0:0:
75 | 281,85,2153,1,0,0:0:0:0:
76 | 344,146,2461,6,0,P|337:212|288:255,2,135,2|0|2,0:0|0:0|0:0,0:0:0:0:
77 | 259,171,3692,2,0,L|122:162,2,135,6|0|2,0:2|0:0|2:2,0:0:0:0:
78 | 256,192,7230,6,0,P|352:144|340:224,1,225,4|0,0:0|0:0,0:0:0:0:
79 | 285,276,8307,1,8,0:0:0:0:
80 | 197,258,8615,2,0,B|178:245|165:213|166:178|166:178|109:178,1,135,6|0,0:0|0:0,0:0:0:0:
81 | 69,103,9384,1,2,0:0:0:0:
82 | 69,103,9692,6,0,B|134:83|134:83|215:103|215:103|294:76,1,225,6|2,0:0|0:0,0:0:0:0:
83 | 370,49,10769,1,8,0:0:0:0:
84 | 438,107,11076,2,0,P|434:173|374:224,1,135,2|2,0:0|0:0,0:0:0:0:
85 | 354,137,11846,1,0,0:0:0:0:
86 | 354,137,12153,6,0,P|311:173|304:263,1,135,6|10,0:0|0:0,0:0:0:0:
87 | 362,312,12923,2,0,P|321:336|269:333,1,90,0|8,0:0|0:0,0:0:0:0:
88 | 213,275,13538,2,0,B|165:241|97:243|97:243|73:183,1,180,2|2,0:0|0:0,0:0:0:0:
89 | 93,101,14461,1,8,0:0:0:0:
90 | 93,101,14769,6,0,B|195:81|195:81|222:105|214:156|214:156|160:168,1,225,8|2,0:0|0:0,0:0:0:0:
91 | 155,254,15846,2,0,L|288:228,1,135,8|0,0:0|0:0,0:0:0:0:
92 | 351,164,16615,2,0,L|402:153,1,45,8|2,0:0|0:0,0:0:0:0:
93 | 280,83,17230,6,0,B|167:59|167:59|110:74|93:141,1,225,2|0,0:0|0:0,0:0:0:0:
94 | 39,200,18307,2,0,B|74:229|110:224|136:211|136:211|269:237,1,225,0|0,0:0|0:0,0:0:0:0:
95 | 343,248,19384,1,0,0:0:0:0:
96 | 375,332,19692,6,0,P|418:295|361:160,1,225,2|0,0:0|0:0,0:0:0:0:
97 | 296,100,20769,1,0,0:0:0:0:
98 | 212,132,21076,2,0,P|182:168|193:261,1,135,0|0,0:0|0:0,0:0:0:0:
99 | 265,207,21846,1,0,0:0:0:0:
100 | 343,248,22153,6,0,B|352:189|363:109|363:109|351:68|299:59,1,225,2|0,0:0|0:0,0:0:0:0:
101 | 214,33,23230,2,0,P|169:56|147:99,1,90,0|0,0:0|0:0,0:0:0:0:
102 | 232,123,23846,2,0,P|207:160|167:178,1,90,0|0,0:0|0:0,0:0:0:0:
103 | 104,242,24461,6,0,B|102:306|159:319|159:319|246:320,1,180,2|0,0:0|0:0,0:0:0:0:
104 | 310,208,25538,1,0,0:0:0:0:
105 | 338,119,25846,6,0,B|424:84|424:156|512:120,2,180,6|0|4,0:0|1:0|0:0,0:0:0:0:
106 | 250,97,27384,1,8,0:0:0:0:
107 | 224,184,27692,6,0,P|229:246|296:296,2,135,2|2|8,0:0|0:0|0:0,0:0:0:0:
108 | 275,110,28923,2,0,L|379:87,1,90,0|10,0:0|0:0,0:0:0:0:
109 | 313,14,29538,2,0,L|209:37,1,90,0|8,0:0|0:0,0:0:0:0:
110 | 175,108,30153,2,0,B|141:86|137:43|137:43|67:44,2,135,0|2|8,0:0|0:0|0:0,0:0:0:0:
111 | 224,184,31384,6,0,B|287:211|340:165|340:165|405:166,2,180,2|6|0,0:0|0:0|0:0,0:0:0:0:
112 | 215,94,32923,1,8,0:0:0:0:
113 | 201,8,33230,2,0,P|137:54|149:151,1,180,2|0,0:0|0:0,0:0:0:0:
114 | 224,184,34153,1,10,0:0:0:0:
115 | 223,275,34461,6,0,B|326:325|326:325|396:313,1,180,6|0,0:0|0:0,0:0:0:0:
116 | 454,194,35538,2,0,P|475:121|438:61,2,135,2|8|2,0:0|0:0|0:0,0:0:0:0:
117 | 319,201,36923,2,0,L|218:201,1,90,4|0,0:0|0:0,0:0:0:0:
118 | 173,271,37538,6,0,B|121:230|147:158|147:158|78:127,2,180,2|2|0,2:0|2:0|0:0,0:0:0:0:
119 | 260,275,39076,1,2,2:0:0:0:
120 | 313,347,39384,6,0,B|270:378|214:353|214:353|131:353,1,180,2|0,2:0|0:0,0:0:0:0:
121 | 104,269,40307,1,2,2:0:0:0:
122 | 13,265,40615,2,0,P|37:203|107:174,2,135,2|2|2,2:0|2:0|2:0,0:0:0:0:
123 | 104,269,41846,5,2,2:0:0:0:
124 | 194,269,42153,2,0,L|245:363,2,90,2|2|2,2:0|2:0|2:0,0:0:0:0:
125 | 149,190,43076,2,0,P|173:128|243:99,2,135,2|2|2,2:0|2:0|2:0,0:0:0:0:
126 | 239,190,44307,6,0,B|335:188|335:188|387:159,2,135,2|2|2,2:0|2:0|2:0,0:0:0:0:
127 | 194,269,45538,2,0,B|97:270|97:270|46:300,2,135,10|10|10,2:0|0:0|0:0,0:0:0:0:
128 | 282,270,46769,6,8,L|381:268,1,90,6|2,0:0|0:0,0:0:0:0:
129 | 332,186,47384,2,8,L|379:99,1,90,2|0,0:0|0:0,0:0:0:0:
130 | 284,100,48000,2,8,L|232:15,1,90,2|2,0:0|0:0,0:0:0:0:
131 | 185,98,48615,6,0,B|191:194|267:150|269:246,1,180,2|0,0:0|0:0,0:0:0:0:
132 | 247,333,49538,1,2,0:0:0:0:
133 | 159,357,49846,2,0,P|115:358|66:332,1,90,2|2,0:0|0:0,0:0:0:0:
134 | 97,252,50461,6,0,P|141:251|190:277,1,90,2|2,0:0|0:0,0:0:0:0:
135 | 247,333,51076,2,0,B|300:381|368:350|368:350|385:299,1,180,2|4,0:0|2:0,0:0:0:0:
136 | 413,217,52000,6,0,P|451:242|474:292,2,90,10|10|10,0:0|0:0|0:0,0:0:0:0:
137 | 323,226,52923,2,0,B|249:223|249:223|191:182|191:182|108:178,1,225,10|0,0:0|0:0,0:0:0:0:
138 | 24,176,54000,2,0,B|5:256|69:306|69:306|176:253|176:336|278:307,1,360,2|0,0:0|0:0,0:0:0:0:
139 | 399,292,55692,6,0,L|497:270,2,90
140 | 324,239,56692,6,0,P|261:181|161:218,1,180,6|2,0:0|0:0,0:0:0:0:
141 | 238,267,57692,1,2,0:0:0:0:
142 | 304,326,58025,2,0,L|409:332,2,89.9999999999999,0|10|0,0:0|0:0|0:0,0:0:0:0:
143 | 218,354,59025,1,8,0:0:0:0:
144 | 153,292,59358,6,8,P|165:211|260:180,1,180,2|2,0:0|0:0,0:0:0:0:
145 | 334,143,60358,1,8,0:0:0:0:
146 | 344,53,60691,2,0,L|442:14,2,90,0|0|0,0:0|0:0|0:0,0:0:0:0:
147 | 263,89,61691,1,0,0:0:0:0:
148 | 180,123,62025,6,0,P|161:175|243:267,1,180,4|8,0:0|0:0,0:0:0:0:
149 | 317,239,63025,1,8,0:0:0:0:
150 | 383,299,63358,2,8,P|403:260|397:199,2,90,2|2|8,0:0|0:0|0:0,0:0:0:0:
151 | 317,239,64358,1,8,0:0:0:0:
152 | 251,178,64691,6,0,L|107:182,2,135,8|0|8,0:0|0:0|0:0,0:0:0:0:
153 | 322,123,66025,1,2,0:0:0:0:
154 | 401,164,66358,1,2,0:0:0:0:
155 | 386,253,66691,2,0,P|362:316|330:339,1,90,8|2,0:0|0:0,0:0:0:0:
156 | 254,327,67358,6,0,B|232:360|232:360|184:348|184:348|132:360|132:360|108:328,1,180,4|2,0:0|0:0,0:0:0:0:
157 | 132,244,68358,1,8,0:0:0:0:
158 | 222,229,68691,2,8,L|316:215,2,90,0|0|0,0:0|0:0|0:0,0:0:0:0:
159 | 132,244,69691,1,2,0:0:0:0:
160 | 75,174,70025,6,8,L|15:99,2,90,2|2|2,0:0|0:0|0:0,0:0:0:0:
161 | 164,159,71025,1,8,0:0:0:0:
162 | 194,71,71358,2,0,L|294:55,1,90,0|0,0:0|0:0,0:0:0:0:
163 | 341,128,72025,2,0,P|338:170|305:218,2,90,0|2|4,0:0|0:0|0:0,0:0:0:0:
164 | 371,41,73025,6,0,L|473:25,2,90,2|8|8,0:0|0:0|0:0,0:0:0:0:
165 | 283,58,74025,1,4,0:0:0:0:
166 | 254,143,74358,2,0,L|216:239,2,90,2|8|8,0:0|0:0|0:0,0:0:0:0:
167 | 283,58,75358,6,0,B|220:32|220:80|148:52,2,135,2|2|12,0:0|0:0|0:0,0:0:0:0:
168 | 344,123,76691,2,0,B|406:188|406:188|464:200,2,135,8|0|8,0:0|0:0|0:0,0:0:0:0:
169 | 257,143,78025,6,0,L|208:279,2,135,6|6|14,0:0|0:0|0:0,0:0:0:0:
170 | 256,192,79191,12,0,80691,0:0:0:0:
171 |
--------------------------------------------------------------------------------
/slider/example_data/beatmaps/AKINO from bless4 & CHiCO with HoneyWorks - MIIRO vs. Ai no Scenario (monstrata) [ktgster's Insane].osu:
--------------------------------------------------------------------------------
1 | osu file format v14
2 |
3 | [General]
4 | AudioFilename: tatoe.mp3
5 | AudioLeadIn: 0
6 | PreviewTime: 6538
7 | Countdown: 0
8 | SampleSet: Soft
9 | StackLeniency: 0.7
10 | Mode: 0
11 | LetterboxInBreaks: 0
12 | WidescreenStoryboard: 0
13 |
14 | [Editor]
15 | DistanceSpacing: 2
16 | BeatDivisor: 4
17 | GridSize: 4
18 | TimelineZoom: 1.4
19 |
20 | [Metadata]
21 | Title:MIIRO vs. Ai no Scenario
22 | TitleUnicode:海色 vs. アイのシナリオ
23 | Artist:AKINO from bless4 & CHiCO with HoneyWorks
24 | ArtistUnicode:AKINO from bless4 & CHiCO with HoneyWorks
25 | Creator:monstrata
26 | Version:ktgster's Insane
27 | Source:
28 | Tags:kyshiro sukinathan ktgster pishifat smoothie world walaowey toybot sheela901 yuii- Sharkie みいろ tv size opening kantai collection kancolle fleet girls magic kaito 1412 まじっく快斗1412 艦隊これくしょん -艦これ-
29 | BeatmapID:722448
30 | BeatmapSetID:325158
31 |
32 | [Difficulty]
33 | HPDrainRate:5.8
34 | CircleSize:5
35 | OverallDifficulty:8.4
36 | ApproachRate:9
37 | SliderMultiplier:1.7
38 | SliderTickRate:1
39 |
40 | [Events]
41 | //Background and Video events
42 | 0,0,"miiro_no_scenario.png",0,0
43 | //Break Periods
44 | //Storyboard Layer 0 (Background)
45 | //Storyboard Layer 1 (Fail)
46 | //Storyboard Layer 2 (Pass)
47 | //Storyboard Layer 3 (Foreground)
48 | //Storyboard Sound Samples
49 |
50 | [TimingPoints]
51 | 0,307.692307692308,4,2,2,50,1,0
52 | 1076,-133.333333333333,4,2,2,50,0,0
53 | 4923,-100,4,2,2,50,0,0
54 | 7230,-100,4,2,2,70,0,0
55 | 17230,-111.111111111111,4,3,1,40,0,0
56 | 25846,-111.111111111111,4,2,2,60,0,0
57 | 27076,-100,4,2,2,70,0,0
58 | 36923,-200,4,2,2,60,0,0
59 | 46769,-142.857142857143,4,2,2,70,0,0
60 | 51692,-111.111111111111,4,2,2,80,0,0
61 | 54153,-111.111111111111,4,2,2,90,0,0
62 | 55692,333.333333333333,4,2,2,70,1,0
63 | 56692,333.333333333333,4,2,2,80,1,1
64 | 67191,-100,4,2,2,80,0,0
65 | 67358,-100,4,2,2,80,0,1
66 | 78025,-100,4,2,2,90,0,0
67 | 80691,-100,4,2,2,5,0,0
68 |
69 |
70 | [Colours]
71 | Combo1 : 0,64,128
72 | Combo2 : 0,255,255
73 | Combo3 : 128,0,255
74 | Combo4 : 192,192,192
75 |
76 | [HitObjects]
77 | 77,79,1076,6,0,L|98:85,3,21.2500008106232,0|0|0|2,0:0|0:0|0:0|0:0,0:0:0:0:
78 | 98,85,1538,2,0,P|116:144|92:214,2,127.500004863739
79 | 155,34,2307,1,2,0:0:0:0:
80 | 230,23,2461,5,2,0:0:0:0:
81 | 285,75,2615,1,0,0:0:0:0:
82 | 295,150,2769,1,0,0:0:0:0:
83 | 281,225,2923,1,2,0:0:0:0:
84 | 209,252,3076,1,0,0:0:0:0:
85 | 268,300,3230,1,0,0:0:0:0:
86 | 221,177,3384,2,0,L|185:103,1,63.7500024318696,2|0,0:0|0:0,0:0:0:0:
87 | 230,23,3692,6,0,L|286:138,1,127.500004863739,2|0,0:0|0:0,0:0:0:0:
88 | 234,194,4153,2,0,L|177:78,1,127.500004863739
89 | 103,58,4615,1,2,0:0:0:0:
90 | 103,58,4922,5,0,0:0:0:0:
91 | 81,203,5076,1,2,0:0:0:0:
92 | 217,147,5230,1,2,0:0:0:0:
93 | 133,135,5384,5,0,0:0:0:0:
94 | 111,280,5538,1,2,0:0:0:0:
95 | 247,224,5692,1,2,0:0:0:0:
96 | 163,212,5846,5,0,0:0:0:0:
97 | 141,357,6000,1,2,0:0:0:0:
98 | 277,301,6154,1,2,0:0:0:0:
99 | 111,280,6307,5,0,0:0:0:0:
100 | 227,369,6461,1,2,0:0:0:0:
101 | 247,224,6615,1,2,0:0:0:0:
102 | 193,289,6769,6,0,L|137:362,1,85,0|0,0:0|0:0,0:0:0:0:
103 | 141,357,7230,6,0,L|66:166,1,170,4|0,1:0|3:0,0:0:0:0:
104 | 148,149,7692,2,0,L|193:265,1,85,10|0,1:2|3:2,0:2:0:0:
105 | 57,346,8000,1,0,1:2:0:0:
106 | 111,280,8154,1,0,3:2:0:0:
107 | 141,357,8307,2,0,L|227:335,1,85,10|0,1:2|3:2,0:2:0:0:
108 | 148,149,8615,6,0,L|62:171,1,85,2|0,1:2|1:2,0:2:0:0:
109 | 32,249,8923,1,8,1:2:0:0:
110 | 83,87,9076,2,0,L|165:65,1,85,2|0,0:2|1:2,0:2:0:0:
111 | 131,233,9384,1,2,3:2:0:0:
112 | 148,149,9538,1,8,1:2:0:0:
113 | 211,205,9692,6,0,L|195:375,1,170,4|0,1:0|1:2,0:2:0:0:
114 | 278,359,10153,2,0,L|285:274,1,85,8|0,1:2|3:2,1:2:0:0:
115 | 131,233,10461,1,0,3:2:0:0:
116 | 123,317,10615,1,0,1:2:0:0:
117 | 53,267,10769,1,10,1:2:0:0:
118 | 200,281,10923,1,0,0:2:0:0:
119 | 139,146,11076,5,0,1:2:0:0:
120 | 123,317,11230,1,0,1:2:0:0:
121 | 279,245,11384,1,10,1:2:0:0:
122 | 295,74,11538,2,0,L|289:164,1,85,2|0,0:2|3:2,0:2:0:0:
123 | 123,317,11846,1,2,1:2:0:0:
124 | 139,146,12000,1,8,1:2:0:0:
125 | 373,40,12153,6,0,L|359:235,1,170,4|0,1:0|1:2,0:2:0:0:
126 | 439,246,12615,1,10,1:2:0:0:
127 | 444,161,12768,1,0,0:2:0:0:
128 | 294,261,12923,2,0,P|327:287|369:294,1,85,0|0,1:2|3:2,0:2:0:0:
129 | 444,161,13230,1,10,1:2:0:0:
130 | 289,91,13384,1,0,0:2:0:0:
131 | 294,261,13538,6,0,L|299:364,1,85,2|0,1:2|3:2,0:2:0:0:
132 | 377,378,13846,1,8,1:2:0:0:
133 | 215,324,14000,2,0,L|204:115,1,170,2|0,0:2|3:2,0:2:0:0:
134 | 205,69,14461,1,10,1:2:0:0:
135 | 132,113,14615,1,0,1:2:0:0:
136 | 279,110,14769,5,8,1:2:0:0:
137 | 132,113,14923,1,0,1:2:0:0:
138 | 207,238,15076,1,8,1:2:0:0:
139 | 205,69,15230,5,0,3:2:0:0:
140 | 120,216,15384,1,8,1:2:0:0:
141 | 290,216,15538,1,8,1:2:0:0:
142 | 290,216,15846,1,8,1:2:0:0:
143 | 207,238,16000,5,8,1:2:0:0:
144 | 370,194,16153,1,0,3:2:0:0:
145 | 328,359,16307,1,8,1:2:0:0:
146 | 232,334,16461,5,0,3:2:0:0:
147 | 396,288,16615,1,2,1:2:0:0:
148 | 276,168,16769,1,2,1:2:0:0:
149 | 276,168,16923,2,0,L|308:277,1,85,0|0,0:2|0:2,0:2:0:0:
150 | 468,360,17230,6,0,P|497:291|466:216,1,152.999995330811,0|0,0:2|0:2,0:2:0:0:
151 | 401,187,17692,2,0,L|323:195,1,76.4999976654053,0|0,0:2|0:2,0:2:0:0:
152 | 280,133,18000,2,0,L|358:125,1,76.4999976654053,0|0,0:2|0:2,0:2:0:0:
153 | 248,202,18307,1,0,0:2:0:0:
154 | 173,210,18461,5,0,0:2:0:0:
155 | 173,210,18615,1,0,0:0:0:0:
156 | 324,194,18769,1,0,0:2:0:0:
157 | 324,194,18923,1,0,0:2:0:0:
158 | 203,141,19076,1,0,0:0:0:0:
159 | 203,141,19230,1,0,0:2:0:0:
160 | 293,264,19384,1,0,0:2:0:0:
161 | 293,264,19538,1,0,0:0:0:0:
162 | 173,210,19692,6,0,L|110:357,1,152.999995330811,0|0,0:2|0:2,0:2:0:0:
163 | 37,338,20153,2,0,L|67:267,1,76.4999976654053,0|0,0:2|0:2,0:2:0:0:
164 | 97,197,20461,1,0,0:2:0:0:
165 | 189,319,20615,1,0,0:2:0:0:
166 | 249,178,20769,6,0,L|224:93,1,76.4999976654053,0|0,0:2|0:2,0:2:0:0:
167 | 189,319,21076,2,0,L|263:337,1,76.4999976654053,0|0,0:2|0:2,0:2:0:0:
168 | 97,197,21384,2,0,L|44:252,1,76.4999976654053,0|0,0:2|0:2,0:2:0:0:
169 | 189,319,21692,1,0,0:2:0:0:
170 | 249,178,21846,1,0,0:2:0:0:
171 | 97,197,22000,1,0,0:2:0:0:
172 | 341,300,22153,5,0,3:2:0:0:
173 | 341,300,22307,1,0,0:2:0:0:
174 | 398,249,22461,2,0,L|377:170,1,76.4999976654053,0|0,0:2|0:2,0:2:0:0:
175 | 443,134,22769,2,0,L|462:207,1,76.4999976654053,0|0,0:2|0:2,0:2:0:0:
176 | 477,283,23076,1,0,0:2:0:0:
177 | 326,224,23230,6,0,L|246:193,1,76.4999976654053,0|0,0:2|0:2,0:2:0:0:
178 | 182,168,23538,1,0,0:2:0:0:
179 | 242,121,23692,1,0,0:2:0:0:
180 | 194,243,23846,2,0,L|159:322,1,76.4999976654053,0|0,0:2|0:2,0:2:0:0:
181 | 90,338,24153,1,0,0:2:0:0:
182 | 92,184,24307,1,0,0:2:0:0:
183 | 92,184,24461,6,0,L|122:114,1,76.4999976654053,0|0,0:2|0:2,0:2:0:0:
184 | 256,293,24769,2,0,L|225:362,1,76.4999976654053,0|0,0:2|0:2,0:2:0:0:
185 | 90,338,25076,2,0,P|121:275|197:226,1,152.999995330811,0|0,0:2|0:2,0:2:0:0:
186 | 263,213,25538,1,0,0:2:0:0:
187 | 337,230,25692,1,0,0:2:0:0:
188 | 337,230,25846,5,2,2:0:0:0:
189 | 415,94,26051,1,2,2:0:0:0:
190 | 415,230,26256,1,2,2:0:0:0:
191 | 337,94,26461,1,2,2:0:0:0:
192 | 455,163,26666,1,2,2:0:0:0:
193 | 302,161,26871,1,2,2:0:0:0:
194 | 302,161,27076,6,0,L|281:275,1,85,4|0,1:0|0:2,0:2:0:0:
195 | 258,325,27384,2,0,P|173:302|183:209,1,170,8|0,1:2|1:2,0:2:0:0:
196 | 217,162,27846,1,0,1:2:0:0:
197 | 217,162,28000,1,8,1:2:0:0:
198 | 348,352,28153,6,0,L|448:330,1,85,2|0,1:2|0:2,0:2:0:0:
199 | 478,169,28461,2,0,L|378:191,1,85,0|8,1:2|1:2,0:2:0:0:
200 | 431,371,28769,6,0,L|486:284,1,85,2|0,0:2|1:2,0:2:0:0:
201 | 394,149,29077,2,0,L|339:236,1,85,0|8,1:2|1:2,0:2:0:0:
202 | 265,361,29384,6,0,P|187:370|132:298,1,170,2|2,0:2|0:2,0:2:0:0:
203 | 143,219,29846,1,8,1:2:0:0:
204 | 203,158,30000,2,0,L|305:159,1,85,2|0,0:2|1:2,0:2:0:0:
205 | 348,98,30307,1,2,3:2:0:0:
206 | 287,37,30461,1,8,1:2:0:0:
207 | 310,238,30615,6,0,L|208:239,1,85,2|0,1:2|0:2,0:2:0:0:
208 | 143,219,30923,1,0,1:2:0:0:
209 | 203,158,31076,1,8,1:2:0:0:
210 | 167,301,31230,1,0,0:2:0:0:
211 | 308,261,31384,2,0,L|135:217,1,170,0|8,1:2|1:2,0:2:0:0:
212 | 203,158,31846,1,0,0:2:0:0:
213 | 223,163,31922,1,0,0:2:0:0:
214 | 244,168,32000,6,0,L|408:209,1,170,4|8,1:0|1:2,0:2:0:0:
215 | 481,165,32461,1,0,0:2:0:0:
216 | 484,249,32615,2,0,P|455:280|397:297,1,85,0|0,1:2|1:2,0:2:0:0:
217 | 336,274,32923,1,8,1:2:0:0:
218 | 383,111,33076,1,2,1:2:0:0:
219 | 512,329,33230,6,0,P|416:369|345:351,1,170,2|8,0:2|1:2,0:2:0:0:
220 | 293,295,33692,1,0,0:2:0:0:
221 | 224,244,33846,2,0,P|206:284|219:339,1,85,0|2,3:2|1:2,0:2:0:0:
222 | 356,191,34153,1,8,1:2:0:0:
223 | 344,106,34308,1,0,3:2:0:0:
224 | 341,84,34384,1,0,3:2:0:0:
225 | 338,63,34461,5,4,0:2:0:0:
226 | 238,142,34615,1,0,0:2:0:0:
227 | 356,191,34769,1,8,1:2:0:0:
228 | 456,112,34923,1,0,0:2:0:0:
229 | 475,237,35076,1,0,1:2:0:0:
230 | 254,269,35230,1,0,3:2:0:0:
231 | 254,269,35307,1,8,1:2:0:0:
232 | 254,269,35384,1,8,1:2:0:0:
233 | 338,63,35538,5,2,1:2:0:0:
234 | 373,314,35846,1,0,1:2:0:0:
235 | 254,269,36000,1,8,1:2:0:0:
236 | 135,314,36153,1,4,1:0:0:0:
237 | 135,314,36461,1,0,1:2:0:0:
238 | 102,286,36538,1,0,1:2:0:0:
239 | 90,245,36615,1,0,1:2:0:0:
240 | 103,204,36692,1,0,1:2:0:0:
241 | 133,174,36769,1,0,1:2:0:0:
242 | 174,163,36846,1,0,1:2:0:0:
243 | 214,176,36923,5,4,1:0:0:0:
244 | 214,176,37538,1,0,0:2:0:0:
245 | 293,207,37846,1,0,0:2:0:0:
246 | 281,123,38153,2,0,B|303:85|303:85|337:71|337:71|365:27,2,127.5,2|0|0,0:2|0:2|0:2,0:2:0:0:
247 | 293,207,39384,6,0,B|271:245|271:245|237:259|237:259|209:303,2,127.5,2|0|0,0:2|0:2|0:2,0:2:0:0:
248 | 360,155,40615,1,2,0:2:0:0:
249 | 214,175,41076,1,0,0:2:0:0:
250 | 68,155,41538,1,0,0:2:0:0:
251 | 68,155,41846,5,0,0:2:0:0:
252 | 19,224,42153,2,0,P|7:265|25:314,2,85,0|0|0,0:2|0:2|0:2,0:2:0:0:
253 | 68,155,43076,2,0,B|111:155|111:155|144:135|144:135|196:135,2,127.5,2|0|0,0:2|0:2|0:2,0:2:0:0:
254 | 7,94,44307,5,2,0:2:0:0:
255 | 256,40,44769,1,2,0:2:0:0:
256 | 179,283,45230,1,2,0:2:0:0:
257 | 179,283,45538,6,0,L|270:272,1,85,2|0,1:2|0:2,0:2:0:0:
258 | 379,367,46000,2,0,L|288:356,1,85,8|0,0:3|0:2,0:2:0:0:
259 | 347,214,46461,2,0,L|396:219,1,42.5,2|0,3:2|0:2,0:2:0:0:
260 | 449,157,46769,5,4,1:0:0:0:
261 | 423,75,46923,1,0,0:2:0:0:
262 | 366,137,47076,1,0,1:2:0:0:
263 | 449,157,47230,1,0,0:2:0:0:
264 | 340,56,47384,2,0,L|193:70,1,118.999996368408,2|0,1:2|1:2,0:2:0:0:
265 | 135,75,47846,1,0,0:2:0:0:
266 | 49,85,48000,5,0,1:2:0:0:
267 | 83,7,48153,1,0,0:2:0:0:
268 | 135,75,48307,2,0,L|119:152,1,59.4999981842042,2|0,1:2|0:2,0:2:0:0:
269 | 97,215,48615,1,0,1:2:0:0:
270 | 168,262,48769,2,0,L|184:185,1,59.4999981842042,8|0,1:2|1:2,0:2:0:0:
271 | 241,304,49076,2,0,L|254:246,1,59.4999981842042,8|0,1:2|1:2,0:2:0:0:
272 | 272,161,49384,5,2,0:2:0:0:
273 | 355,179,49538,2,0,L|342:237,1,59.4999981842042,0|0,1:2|0:2,0:2:0:0:
274 | 326,322,49846,2,0,P|386:344|448:328,1,118.999996368408,2|0,1:2|1:2,0:2:0:0:
275 | 497,270,50307,1,2,0:2:0:0:
276 | 355,179,50461,6,0,L|280:189,1,59.4999981842042,2|0,1:2|0:2,0:2:0:0:
277 | 237,123,50769,1,2,1:2:0:0:
278 | 212,205,50923,1,0,0:2:0:0:
279 | 140,128,51076,1,10,1:2:0:0:
280 | 212,205,51230,1,0,1:2:0:0:
281 | 89,235,51384,1,8,1:2:0:0:
282 | 212,205,51538,1,0,1:2:0:0:
283 | 169,349,51692,5,4,1:0:0:0:
284 | 258,328,51846,1,0,0:2:0:0:
285 | 345,357,52000,1,8,1:2:0:0:
286 | 434,336,52154,1,0,1:2:0:0:
287 | 371,269,52307,1,0,1:2:0:0:
288 | 345,357,52461,1,0,3:2:0:0:
289 | 461,248,52615,1,0,1:2:0:0:
290 | 308,202,52769,1,8,1:2:0:0:
291 | 371,269,52923,5,0,0:2:0:0:
292 | 425,92,53076,1,0,1:2:0:0:
293 | 245,135,53230,1,8,1:2:0:0:
294 | 269,237,53384,5,0,3:2:0:0:
295 | 449,196,53537,1,2,3:2:0:0:
296 | 322,61,53692,2,0,L|345:158,1,76.4999976654053,8|0,1:2|3:2,0:2:0:0:
297 | 371,269,54000,1,0,1:2:0:0:
298 | 449,196,54153,6,0,L|431:121,1,76.4999976654053,4|0,1:0|0:2,0:2:0:0:
299 | 371,269,54461,2,0,L|353:194,1,76.4999976654053,0|0,1:2|0:2,0:2:0:0:
300 | 269,237,54769,2,0,L|251:162,1,76.4999976654053,0|0,1:2|0:2,0:2:0:0:
301 | 191,310,55076,1,8,1:2:0:0:
302 | 182,272,55152,1,8,1:2:0:0:
303 | 173,235,55230,2,0,L|155:160,1,76.4999976654053,10|0,1:2|0:2,0:2:0:0:
304 | 155,160,56692,6,0,P|218:113|325:141,1,170,4|0,1:0|1:2,0:2:0:0:
305 | 372,175,57192,1,0,0:2:0:0:
306 | 383,91,57358,1,4,3:0:0:0:
307 | 294,209,57525,2,0,L|309:302,1,85,2|0,0:2|1:2,0:2:0:0:
308 | 159,377,57858,6,0,L|144:284,1,85,2|4,0:2|3:0,0:2:0:0:
309 | 294,209,58192,2,0,L|279:302,1,85,2|0,0:2|1:2,0:2:0:0:
310 | 432,369,58525,2,0,P|485:291|448:217,1,170,2|2,0:2|0:2,0:2:0:0:
311 | 379,201,59025,1,0,1:2:0:0:
312 | 379,201,59192,1,0,0:2:0:0:
313 | 294,209,59358,6,0,P|333:131|416:125,1,170,4|0,3:0|1:2,0:2:0:0:
314 | 464,186,59858,1,0,0:2:0:0:
315 | 379,201,60025,1,4,3:0:0:0:
316 | 300,49,60192,2,0,L|212:33,1,85,2|0,0:2|1:2,0:2:0:0:
317 | 23,190,60525,6,0,L|111:174,1,85,2|4,0:2|3:0,0:2:0:0:
318 | 121,90,60858,2,0,L|33:106,1,85,2|0,0:0|1:0,0:0:0:0:
319 | 14,273,61191,2,0,L|209:237,1,170,2|0,0:0|0:0,0:0:0:0:
320 | 205,74,61691,1,2,1:2:0:0:
321 | 121,90,61858,1,0,0:0:0:0:
322 | 177,154,62025,6,0,L|280:171,1,85,4|0,1:0|0:0,0:0:0:0:
323 | 205,74,62358,2,0,L|388:104,1,170,2|4,1:2|3:0,0:0:0:0:
324 | 352,19,62858,2,0,L|455:36,1,85,2|0,0:0|1:0,0:0:0:0:
325 | 457,115,63191,1,2,0:0:0:0:
326 | 335,230,63358,6,0,L|232:213,1,85,4|0,3:0|0:0,0:0:0:0:
327 | 307,310,63691,2,0,L|123:279,1,170,2|4,1:2|3:0,0:0:0:0:
328 | 160,365,64191,2,0,L|57:348,1,85,2|0,0:0|1:0,0:0:0:0:
329 | 55,269,64524,1,2,0:0:0:0:
330 | 192,129,64691,6,0,L|209:232,1,85,4|0,3:0|0:0,0:0:0:0:
331 | 222,296,65025,1,2,1:2:0:0:
332 | 307,310,65191,2,0,L|273:109,1,170,0|0,0:0|0:0,0:0:0:0:
333 | 246,63,65691,1,0,1:0:0:0:
334 | 192,129,65858,1,0,0:0:0:0:
335 | 331,76,66025,5,4,1:0:0:0:
336 | 363,154,66191,1,0,0:0:0:0:
337 | 278,142,66358,1,0,1:0:0:0:
338 | 414,86,66525,1,0,3:2:0:0:
339 | 433,76,66608,1,0,3:0:0:0:
340 | 452,67,66691,1,4,3:0:0:0:
341 | 396,230,66859,1,0,3:2:0:0:
342 | 395,251,66942,1,0,3:0:0:0:
343 | 393,272,67025,1,0,1:0:0:0:
344 | 278,142,67191,1,0,3:0:0:0:
345 | 260,130,67274,1,0,3:0:0:0:
346 | 243,118,67358,6,0,P|172:98|86:154,1,170,4|0,1:0|1:0,0:0:0:0:
347 | 60,222,67858,1,0,0:0:0:0:
348 | 144,211,68025,1,4,3:0:0:0:
349 | 112,289,68191,2,0,L|87:375,1,85,2|0,0:0|1:0,0:0:0:0:
350 | 423,370,68525,6,0,L|399:288,1,85,2|4,0:0|3:0,0:0:0:0:
351 | 314,298,68858,2,0,L|337:216,1,85,2|0,0:0|1:0,0:0:0:0:
352 | 499,363,69191,2,0,L|475:281,1,85,2|4,0:0|3:0,0:0:0:0:
353 | 243,272,69525,2,0,L|266:190,1,85,2|0,0:0|1:0,0:0:0:0:
354 | 430,99,69858,1,0,0:0:0:0:
355 | 430,99,70025,6,0,L|380:276,1,170,4|0,3:0|1:0,0:0:0:0:
356 | 358,343,70525,1,0,0:0:0:0:
357 | 300,280,70691,1,4,3:0:0:0:
358 | 274,361,70858,1,2,0:0:0:0:
359 | 217,297,71025,1,0,1:0:0:0:
360 | 383,262,71191,6,0,L|410:163,1,85,2|4,0:0|3:0,0:0:0:0:
361 | 194,215,71525,2,0,L|221:313,1,85,2|0,0:0|1:0,0:0:0:0:
362 | 303,159,71858,2,0,L|330:60,1,85,2|4,0:0|3:0,0:0:0:0:
363 | 55,123,72192,2,0,L|82:221,1,85,2|0,0:0|1:0,0:0:0:0:
364 | 102,286,72525,1,2,0:0:0:0:
365 | 19,266,72691,5,4,1:0:0:0:
366 | 160,224,72858,1,0,0:0:0:0:
367 | 281,307,73025,2,0,P|359:346|450:335,1,170,2|4,1:2|3:0,0:0:0:0:
368 | 491,271,73525,2,0,L|473:161,1,85,2|0,0:0|1:0,0:0:0:0:
369 | 443,64,73858,1,2,0:0:0:0:
370 | 360,160,74024,5,4,3:0:0:0:
371 | 249,257,74191,1,0,0:0:0:0:
372 | 221,112,74358,2,0,P|157:64|60:78,1,170,2|4,1:2|3:0,0:0:0:0:
373 | 22,141,74858,2,0,L|43:250,1,85,2|0,0:0|1:0,0:0:0:0:
374 | 58,307,75191,1,2,0:0:0:0:
375 | 265,340,75358,6,0,L|244:231,1,85,4|0,3:0|0:0,0:0:0:0:
376 | 231,173,75691,1,0,1:0:0:0:
377 | 168,231,75858,1,2,0:0:0:0:
378 | 344,366,76025,2,0,L|323:257,1,85,4|2,3:0|0:0,0:0:0:0:
379 | 312,200,76358,1,2,1:2:0:0:
380 | 392,227,76525,1,2,0:0:0:0:
381 | 248,256,76691,5,2,1:2:0:0:
382 | 392,227,76858,1,0,3:0:0:0:
383 | 411,234,76941,1,0,3:0:0:0:
384 | 431,241,77025,1,0,1:0:0:0:
385 | 293,117,77192,1,0,3:0:0:0:
386 | 289,97,77275,1,0,3:0:0:0:
387 | 285,76,77359,1,0,1:0:0:0:
388 | 248,256,77525,1,0,3:0:0:0:
389 | 232,269,77608,1,0,3:0:0:0:
390 | 216,283,77692,1,0,1:0:0:0:
391 | 312,200,77858,1,0,3:0:0:0:
392 | 312,200,77941,1,0,3:0:0:0:
393 | 312,200,78025,5,4,1:0:0:0:
394 | 215,92,78192,1,0,1:0:0:0:
395 | 359,61,78358,1,0,1:0:0:0:
396 | 335,281,78525,5,4,1:0:0:0:
397 | 134,72,78692,1,0,1:0:0:0:
398 | 416,0,78859,1,0,1:0:0:0:
399 | 297,118,79025,5,4,1:0:0:0:
400 | 256,192,79108,12,6,80691,0:0:0:0:
401 |
--------------------------------------------------------------------------------
/slider/example_data/beatmaps/AKINO from bless4 & CHiCO with HoneyWorks - MIIRO vs. Ai no Scenario (monstrata) [sheela's Very Hard].osu:
--------------------------------------------------------------------------------
1 | osu file format v14
2 |
3 | [General]
4 | AudioFilename: tatoe.mp3
5 | AudioLeadIn: 0
6 | PreviewTime: 6538
7 | Countdown: 0
8 | SampleSet: Normal
9 | StackLeniency: 0.7
10 | Mode: 0
11 | LetterboxInBreaks: 0
12 | WidescreenStoryboard: 0
13 |
14 | [Editor]
15 | DistanceSpacing: 1.4
16 | BeatDivisor: 4
17 | GridSize: 4
18 | TimelineZoom: 1.8
19 |
20 | [Metadata]
21 | Title:MIIRO vs. Ai no Scenario
22 | TitleUnicode:海色 vs. アイのシナリオ
23 | Artist:AKINO from bless4 & CHiCO with HoneyWorks
24 | ArtistUnicode:AKINO from bless4 & CHiCO with HoneyWorks
25 | Creator:monstrata
26 | Version:sheela's Very Hard
27 | Source:
28 | Tags:kyshiro sukinathan ktgster pishifat smoothie world walaowey toybot sheela901 yuii- Sharkie みいろ tv size opening kantai collection kancolle fleet girls magic kaito 1412 まじっく快斗1412 艦隊これくしょん -艦これ-
29 | BeatmapID:724212
30 | BeatmapSetID:325158
31 |
32 | [Difficulty]
33 | HPDrainRate:5.5
34 | CircleSize:4
35 | OverallDifficulty:6.5
36 | ApproachRate:8
37 | SliderMultiplier:1.4
38 | SliderTickRate:1
39 |
40 | [Events]
41 | //Background and Video events
42 | 0,0,"miiro_no_scenario.png",0,0
43 | //Break Periods
44 | //Storyboard Layer 0 (Background)
45 | //Storyboard Layer 1 (Fail)
46 | //Storyboard Layer 2 (Pass)
47 | //Storyboard Layer 3 (Foreground)
48 | //Storyboard Sound Samples
49 |
50 | [TimingPoints]
51 | 0,307.692307692308,4,2,1,60,1,0
52 | 1230,-133.333333333333,4,2,1,60,0,0
53 | 3692,-133.333333333333,4,1,1,60,0,0
54 | 7230,-100,4,1,1,60,0,0
55 | 17230,-133.333333333333,4,2,1,45,0,0
56 | 27076,-100,4,1,1,60,0,0
57 | 36923,-133.333333333333,4,2,1,45,0,0
58 | 46769,-100,4,2,1,60,0,0
59 | 55692,333.333333333333,4,2,1,45,1,0
60 | 56692,333.333333333333,4,1,1,70,1,1
61 | 67191,-100,4,1,1,70,0,0
62 | 67275,-100,4,2,1,70,0,0
63 | 67358,-100,4,1,1,70,0,1
64 | 78025,-100,4,1,1,70,0,0
65 | 79025,-100,4,1,1,50,0,0
66 | 80691,-100,4,1,1,50,0,0
67 |
68 |
69 | [Colours]
70 | Combo1 : 0,64,128
71 | Combo2 : 0,255,255
72 | Combo3 : 128,0,255
73 | Combo4 : 192,192,192
74 |
75 | [HitObjects]
76 | 131,160,1230,6,0,P|182:182|248:160,1,105.000004005432,6|0,0:0|0:0,0:0:0:0:
77 | 284,124,1692,1,0,0:0:0:0:
78 | 336,72,1846,2,0,L|394:64,1,52.5000020027161,2|0,0:0|0:0,0:0:0:0:
79 | 439,149,2153,2,0,L|386:141,1,52.5000020027161,0|0,0:0|0:0,0:0:0:0:
80 | 323,232,2461,6,0,P|351:227|397:242,2,52.5000020027161,2|0|2,0:0|0:0|0:0,0:0:0:0:
81 | 257,266,2923,2,0,P|231:269|205:264,2,52.5000020027161,0|2|0,0:0|0:0|0:0,0:0:0:0:
82 | 236,195,3384,1,2,0:0:0:0:
83 | 236,195,3692,2,0,B|218:148|218:148|228:122|228:122|219:89|219:89|233:61|223:28,2,157.500006008148,6|0|2,0:2|0:0|2:2,0:0:0:0:
84 | 182,285,4923,6,0,L|174:346,2,52.5000020027161,0|2|2,2:0|2:0|2:0,0:0:0:0:
85 | 261,264,5384,6,0,L|253:325,2,52.5000020027161,0|2|2,2:0|2:0|2:0,0:0:0:0:
86 | 341,245,5846,6,0,L|333:306,2,52.5000020027161,0|2|2,2:0|2:0|2:0,0:0:0:0:
87 | 421,226,6307,6,0,L|413:287,2,52.5000020027161,0|2|2,2:0|2:0|2:0,0:0:0:0:
88 | 376,18,7230,6,0,P|345:60|373:154,1,140,4|2,0:0|0:3,0:0:0:0:
89 | 490,85,7692,2,0,L|420:86,1,70,8|0,0:0|0:0,0:0:0:0:
90 | 259,133,8000,2,0,P|253:94|257:46,1,70,0|0,0:0|0:0,0:0:0:0:
91 | 178,12,8307,1,8,0:0:0:0:
92 | 114,76,8461,1,0,0:0:0:0:
93 | 25,113,8615,6,0,L|31:44,2,70,2|0|8,0:2|0:0|0:0,0:0:0:0:
94 | 98,170,9076,2,0,P|136:160|213:187,1,105,2|0,0:2|0:0,0:0:0:0:
95 | 222,200,9384,2,0,P|274:211|293:212,1,70,2|8,0:2|0:0,0:0:0:0:
96 | 338,98,9692,6,0,L|332:268,1,140,4|2,0:0|0:3,0:0:0:0:
97 | 417,272,10153,2,0,P|468:264|513:274,1,70,8|0,0:0|0:0,0:0:0:0:
98 | 380,354,10461,2,0,P|345:355|311:347,1,70,2|0,0:2|0:0,0:0:0:0:
99 | 241,287,10769,1,8,0:0:0:0:
100 | 173,348,10923,1,0,0:0:0:0:
101 | 102,291,11076,6,0,L|30:282,2,70,2|0|8,0:2|0:0|0:0,0:0:0:0:
102 | 71,187,11538,2,0,P|114:195|168:152,1,105,2|0,0:2|0:0,0:0:0:0:
103 | 186,131,11846,2,0,L|179:60,1,70,0|8,0:0|0:0,0:0:0:0:
104 | 302,75,12153,6,0,L|295:233,1,140,4|2,0:0|0:3,0:0:0:0:
105 | 275,304,12615,2,0,P|316:305|354:287,1,70,8|0,0:0|0:0,0:0:0:0:
106 | 389,212,12923,1,2,0:2:0:0:
107 | 463,262,13076,1,0,0:0:0:0:
108 | 478,128,13230,6,0,P|432:112|339:149,2,140,8|2|8,0:0|0:2|0:0,0:0:0:0:
109 | 419,193,14000,2,0,L|435:284,1,70,2|2,0:2|0:3,0:0:0:0:
110 | 380,361,14307,2,0,P|352:337|350:226,1,140,0|2,0:0|0:2,0:0:0:0:
111 | 320,207,14692,1,2,0:2:0:0:
112 | 320,207,14769,6,0,L|243:204,1,70,8|2,0:0|0:2,0:0:0:0:
113 | 174,121,15076,2,0,L|243:118,1,70,8|2,0:0|0:2,0:0:0:0:
114 | 318,65,15384,1,8,0:0:0:0:
115 | 406,125,15538,2,0,P|459:97|455:6,1,140,2|2,0:2|0:2,0:0:0:0:
116 | 318,65,16000,6,0,P|278:48|238:47,1,70,8|0,0:2|0:0,0:0:0:0:
117 | 154,187,16307,2,0,P|171:147|172:107,1,70,8|0,0:0|0:0,0:0:0:0:
118 | 51,205,16615,1,10,0:0:0:0:
119 | 51,205,16769,1,10,0:0:0:0:
120 | 137,354,17230,6,0,P|168:341|246:363,1,105.000004005432,2|0,0:0|0:0,0:0:0:0:
121 | 292,307,17692,1,2,0:0:0:0:
122 | 292,307,17846,2,0,L|354:313,1,52.5000020027161,0|0,0:0|0:0,0:0:0:0:
123 | 415,292,18153,2,0,L|477:298,1,52.5000020027161,0|2,0:3|0:0,0:0:0:0:
124 | 409,206,18461,6,0,P|373:183|368:117,1,105.000004005432,0|2,0:0|0:0,0:0:0:0:
125 | 414,70,18923,2,0,L|294:67,1,105.000004005432,0|0,0:0|0:0,0:0:0:0:
126 | 236,76,19384,1,0,0:0:0:0:
127 | 164,95,19538,1,0,0:0:0:0:
128 | 131,161,19692,6,0,P|123:259|124:275,1,105.000004005432,2|0,0:0|0:0,0:0:0:0:
129 | 165,325,20153,1,2,0:0:0:0:
130 | 236,308,20307,1,0,0:0:0:0:
131 | 306,328,20461,1,0,0:0:0:0:
132 | 371,295,20615,2,0,L|435:294,1,52.5000020027161,0|2,0:0|0:0,0:0:0:0:
133 | 485,204,20923,6,0,L|469:84,1,105.000004005432,0|0,0:0|0:0,0:0:0:0:
134 | 393,146,21384,2,0,L|377:26,1,105.000004005432,0|0,0:0|0:0,0:0:0:0:
135 | 290,70,21846,2,0,P|262:69|227:73,1,52.5000020027161,2|0,0:0|0:0,0:0:0:0:
136 | 164,127,22153,6,0,P|186:93|155:18,1,105.000004005432,2|2,0:0|0:0,0:0:0:0:
137 | 105,73,22615,1,0,0:0:0:0:
138 | 89,150,22769,2,0,P|108:185|130:196,1,52.5000020027161,2|0,0:0|0:0,0:0:0:0:
139 | 184,243,23076,2,0,P|166:262|142:271,1,52.5000020027161,0|2,0:0|0:0,0:0:0:0:
140 | 237,181,23384,6,0,P|261:212|246:293,1,105.000004005432,0|0,0:0|0:0,0:0:0:0:
141 | 276,346,23846,2,0,P|278:302|324:254,1,105.000004005432,2|0,0:0|0:0,0:0:0:0:
142 | 392,252,24307,1,0,0:0:0:0:
143 | 460,277,24461,1,2,0:0:0:0:
144 | 468,170,24615,6,0,L|458:61,1,105.000004005432,0|0,0:0|0:0,0:0:0:0:
145 | 368,124,25076,2,0,P|310:108|252:118,1,105.000004005432,2|0,0:0|0:0,0:0:0:0:
146 | 199,80,25538,1,2,0:0:0:0:
147 | 131,108,25692,1,0,0:0:0:0:
148 | 92,198,25846,6,0,L|89:282,2,70.0000026702882,2|0|0,1:2|0:0|0:0,0:0:0:0:
149 | 201,149,26461,6,0,L|198:65,2,70.0000026702882,0|0|0,1:0|0:0|0:0,0:0:0:0:
150 | 302,231,27076,6,0,L|305:147,1,70.0000026702882,4|0,0:0|0:0,0:0:0:0:
151 | 366,57,27384,2,0,P|397:118|375:189,1,140,8|2,0:0|0:2,0:0:0:0:
152 | 424,263,27846,1,0,0:0:0:0:
153 | 379,342,28000,1,8,0:0:0:0:
154 | 292,313,28153,6,0,P|220:293|145:323,1,140,2|0,0:3|0:0,0:0:0:0:
155 | 79,356,28615,1,8,0:0:0:0:
156 | 79,356,28769,2,0,L|58:218,1,140,0|0,0:0|0:0,0:0:0:0:
157 | 77,128,29230,1,8,0:0:0:0:
158 | 159,86,29384,6,0,P|209:86|235:80,1,70,6|2,0:0|0:2,0:0:0:0:
159 | 303,169,29692,2,0,P|253:169|227:163,1,70,0|8,0:0|0:0,0:0:0:0:
160 | 180,246,30000,1,0,0:0:0:0:
161 | 227,330,30153,1,2,3:2:0:0:
162 | 320,308,30307,2,0,L|394:312,1,70,0|8,0:0|0:0,0:0:0:0:
163 | 472,268,30615,6,0,P|482:230|452:116,1,140,2|2,0:3|0:3,0:0:0:0:
164 | 403,64,31076,1,8,0:0:0:0:
165 | 223,33,31384,2,0,L|148:39,1,70,2|0,0:2|3:0,0:0:0:0:
166 | 113,121,31692,2,0,L|38:127,1,70,8|0,0:0|0:0,0:0:0:0:
167 | 7,231,32000,6,0,P|39:209|140:240,1,140,4|8,0:0|0:0,0:0:0:0:
168 | 72,299,32461,1,0,0:0:0:0:
169 | 197,291,32615,2,0,P|215:257|220:221,1,70,2|0,3:2|0:0,0:0:0:0:
170 | 282,136,32923,2,0,P|288:170|305:200,1,70,8|2,0:0|0:2,0:0:0:0:
171 | 416,241,33230,5,2,0:3:0:0:
172 | 416,241,33384,1,0,0:0:0:0:
173 | 469,168,33538,2,0,L|468:98,1,70,8|0,0:0|0:0,0:0:0:0:
174 | 402,34,33846,1,0,0:0:0:0:
175 | 304,45,34000,2,0,B|263:52|263:52|205:41,1,70,0|8,3:0|0:0,0:0:0:0:
176 | 144,40,34307,1,2,0:2:0:0:
177 | 144,40,34384,1,0,0:0:0:0:
178 | 144,40,34461,6,0,P|115:86|147:164,1,140,4|8,0:0|0:0,0:0:0:0:
179 | 224,205,34923,1,0,0:0:0:0:
180 | 308,177,35076,2,0,L|383:175,1,70,2|2,0:3|0:2,0:0:0:0:
181 | 445,264,35384,1,8,0:0:0:0:
182 | 445,264,35538,6,0,B|418:292|418:292|377:283|377:283|340:308|304:306,1,140,2|2,0:3|3:2,0:0:0:0:
183 | 246,320,36000,1,8,0:0:0:0:
184 | 147,344,36153,6,0,L|132:269,1,70,6|0,0:2|0:0,0:0:0:0:
185 | 160,170,36461,2,0,L|112:162,2,35,2|0|0,3:2|0:0|0:0,0:0:0:0:
186 | 265,212,36769,1,0,0:0:0:0:
187 | 265,212,36846,1,0,0:0:0:0:
188 | 265,212,36923,6,0,P|288:193|285:113,1,105.000004005432,4|0,0:0|0:0,0:0:0:0:
189 | 165,47,37538,2,0,L|224:42,1,52.5000020027161,2|0,2:0|2:0,0:0:0:0:
190 | 291,46,37846,2,0,L|358:49,1,52.5000020027161,2|0,2:0|2:0,0:0:0:0:
191 | 409,80,38153,6,0,L|417:208,1,105.000004005432,2|0,2:0|2:0,0:0:0:0:
192 | 325,251,38615,2,0,L|333:123,1,105.000004005432,2|0,2:0|2:0,0:0:0:0:
193 | 255,124,39076,1,2,2:0:0:0:
194 | 255,124,39230,1,2,2:0:0:0:
195 | 173,76,39384,6,0,P|158:118|186:192,1,105.000004005432,2|0,2:0|2:0,0:0:0:0:
196 | 211,253,39846,2,0,B|156:246|156:246|97:253,1,105.000004005432,2|0,2:0|2:0,0:0:0:0:
197 | 35,268,40307,1,2,2:0:0:0:
198 | 220,342,40615,6,0,P|263:324|286:217,2,157.500006008148,2|2|2,2:0|2:0|2:0,0:0:0:0:
199 | 103,192,41846,6,0,B|136:186|136:186|176:189|176:189|222:185,1,105.000004005432,2|2,2:0|2:0,0:0:0:0:
200 | 343,98,42461,2,0,B|310:92|310:92|270:95|270:95|224:91,1,105.000004005432,2|2,2:0|2:0,0:0:0:0:
201 | 165,80,42923,1,0,2:0:0:0:
202 | 93,92,43076,6,0,P|84:139|110:201,1,105.000004005432,2|0,2:0|2:0,0:0:0:0:
203 | 189,230,43538,2,0,L|301:229,1,105.000004005432,2|0,2:0|2:0,0:0:0:0:
204 | 356,268,44000,1,2,2:0:0:0:
205 | 417,307,44153,1,2,2:0:0:0:
206 | 472,258,44307,6,0,P|476:212|470:142,1,105.000004005432,2|0,2:0|2:0,0:0:0:0:
207 | 376,83,44769,2,0,P|371:135|375:187,1,105.000004005432,2|0,2:0|2:0,0:0:0:0:
208 | 293,195,45230,2,0,L|293:160,2,35.0000013351441,2|0|0,2:0|0:0|0:0,0:0:0:0:
209 | 254,225,45538,6,0,P|205:213|140:220,1,105.000004005432,8|2,2:3|2:0,0:0:0:0:
210 | 49,274,46000,2,0,P|61:225|54:160,1,105.000004005432,8|0,0:3|0:0,0:0:0:0:
211 | 27,103,46461,1,4,0:3:0:0:
212 | 268,57,46769,6,0,B|327:67|327:67|439:60,1,140,4|2,0:0|0:3,0:0:0:0:
213 | 492,94,47230,1,0,0:0:0:0:
214 | 449,174,47384,2,0,P|443:231|449:256,1,70,2|0,0:0|0:0,0:0:0:0:
215 | 347,324,47692,2,0,P|353:267|347:242,1,70,2|0,0:3|0:0,0:0:0:0:
216 | 241,283,48000,6,0,L|96:282,1,140,2|2,0:0|0:3,0:0:0:0:
217 | 5,269,48461,1,0,0:0:0:0:
218 | 54,187,48615,1,2,0:0:0:0:
219 | 54,187,48769,1,4,2:0:0:0:
220 | 152,193,48923,2,0,P|199:189|223:187,1,70,2|12,0:0|0:0,0:0:0:0:
221 | 309,224,49230,6,0,P|274:184|279:95,1,140,0|2,0:0|0:3,0:0:0:0:
222 | 355,145,49692,1,0,0:0:0:0:
223 | 397,233,49846,2,0,P|390:275|291:317,1,140,2|2,0:0|0:3,0:0:0:0:
224 | 225,351,50307,1,0,0:0:0:0:
225 | 159,289,50461,6,0,L|83:285,1,70,2|0,0:0|0:0,0:0:0:0:
226 | 32,207,50769,2,0,L|101:203,1,70,8|0,0:3|0:0,0:0:0:0:
227 | 187,172,51076,1,12,0:3:0:0:
228 | 187,172,51230,1,0,0:0:0:0:
229 | 255,233,51384,2,0,P|290:237|328:232,1,70,0|2,0:0|3:2,0:0:0:0:
230 | 420,304,51692,6,0,P|443:263|418:163,1,140,4|12,2:0|0:3,0:0:0:0:
231 | 378,98,52153,1,0,0:0:0:0:
232 | 378,98,52307,1,2,3:3:0:0:
233 | 289,118,52461,2,0,P|223:123|204:119,1,70,2|2,0:0|0:3,0:0:0:0:
234 | 108,191,52769,2,0,P|142:189|177:195,1,70,12|10,0:3|0:0,0:0:0:0:
235 | 255,233,53076,5,2,0:0:0:0:
236 | 229,320,53230,2,0,P|267:329|334:256,1,140,8|10,0:3|0:0,0:0:0:0:
237 | 325,171,53692,2,0,B|348:174|375:183|375:183|455:135,1,140,12|2,0:3|0:3,0:0:0:0:
238 | 481,44,54153,5,12,0:3:0:0:
239 | 481,44,54307,1,2,0:0:0:0:
240 | 374,61,54461,2,0,L|274:58,1,70,0|10,0:3|0:3,0:0:0:0:
241 | 136,95,54769,2,0,L|206:98,1,70,0|6,0:3|0:3,0:0:0:0:
242 | 43,161,55076,1,2,0:0:0:0:
243 | 43,161,55153,1,2,0:0:0:0:
244 | 43,161,55230,1,2,2:0:0:0:
245 | 43,161,55692,6,0,L|20:307,2,140
246 | 43,161,56692,6,0,P|92:181|194:158,1,140,4|8,0:2|0:0,0:0:0:0:
247 | 233,97,57192,1,0,0:0:0:0:
248 | 312,141,57358,2,0,P|351:144|383:139,1,70,2|0,0:3|0:0,0:0:0:0:
249 | 456,86,57692,1,8,0:0:0:0:
250 | 494,186,57858,6,0,L|509:332,1,140,2|2,0:2|0:2,0:0:0:0:
251 | 421,302,58358,2,0,P|376:285|282:324,1,140,8|0,0:0|0:0,0:0:0:0:
252 | 227,377,58858,1,2,0:3:0:0:
253 | 227,377,59025,2,0,P|207:343|206:305,1,70,8|0,0:0|0:0,0:0:0:0:
254 | 264,218,59358,6,0,B|213:197|171:246|115:206,2,140,2|8|2,0:2|0:0|0:3,0:0:0:0:
255 | 325,286,60192,1,0,0:0:0:0:
256 | 400,236,60358,2,0,L|477:226,1,70,8|2,0:0|0:3,0:0:0:0:
257 | 474,123,60691,6,0,B|389:132|389:132|327:106,1,140,0|8,3:0|0:0,0:0:0:0:
258 | 256,63,61191,1,0,0:0:0:0:
259 | 173,110,61358,2,0,B|123:132|123:132|38:123,1,140,2|8,0:3|0:0,0:0:0:0:
260 | 62,217,61858,1,0,0:0:0:0:
261 | 182,227,62025,6,0,L|331:222,1,140,4|8,0:0|0:0,0:0:0:0:
262 | 445,314,62691,1,2,0:2:0:0:
263 | 445,314,62858,2,0,P|391:312|368:317,1,70,0|8,0:0|0:0,0:0:0:0:
264 | 292,358,63191,6,0,P|248:338|157:351,1,140,2|0,0:3|0:0,0:0:0:0:
265 | 75,313,63691,2,0,P|61:283|50:225,1,70,8|0,0:0|0:0,0:0:0:0:
266 | 54,155,64025,1,2,0:2:0:0:
267 | 54,155,64191,1,0,0:0:0:0:
268 | 141,123,64358,2,0,L|219:121,1,70,8|2,0:0|0:3,0:0:0:0:
269 | 308,160,64691,6,0,P|377:175|445:159,2,140,2|8|2,0:2|0:0|0:2,0:0:0:0:
270 | 255,14,65691,1,8,0:0:0:0:
271 | 255,14,65858,1,2,0:2:0:0:
272 | 170,48,66025,6,0,P|127:44|84:50,1,70,4|0,0:2|0:0,0:0:0:0:
273 | 62,153,66358,2,0,L|148:141,1,70,8|2,0:0|3:2,0:0:0:0:
274 | 173,162,66608,5,0,3:0:0:0:
275 | 173,162,66691,2,0,P|214:168|266:168,1,70,2|0,3:3|3:0,0:0:0:0:
276 | 287,161,66941,1,0,3:0:0:0:
277 | 287,161,67025,1,8,3:1:0:0:
278 | 251,295,67191,1,2,3:0:0:0:
279 | 251,295,67275,1,0,3:0:0:0:
280 | 251,295,67358,6,0,B|338:307|338:307|406:287,1,140,4|8,0:0|0:0,0:0:0:0:
281 | 467,248,67858,1,0,0:0:0:0:
282 | 467,158,68025,2,0,L|472:89,1,70,2|0,0:3|0:0,0:0:0:0:
283 | 380,11,68358,2,0,L|385:80,1,70,8|2,0:0|0:2,0:0:0:0:
284 | 278,131,68691,6,0,P|241:155|146:138,1,140,2|8,3:3|0:0,0:0:0:0:
285 | 209,71,69191,1,0,0:0:0:0:
286 | 209,71,69358,2,0,L|199:234,1,140,2|8,0:3|0:0,0:0:0:0:
287 | 107,334,70025,6,0,L|266:340,1,140,2|8,0:2|0:0,0:0:0:0:
288 | 335,315,70525,1,0,0:0:0:0:
289 | 335,315,70691,2,0,P|360:270|360:229,1,70,2|0,0:2|0:0,0:0:0:0:
290 | 246,201,71025,2,0,P|253:234|273:263,1,70,8|2,0:0|0:2,0:0:0:0:
291 | 329,176,71358,6,0,P|311:142|207:123,1,140,2|8,0:3|0:0,0:0:0:0:
292 | 132,148,71858,1,2,0:2:0:0:
293 | 132,148,72025,1,2,0:3:0:0:
294 | 83,224,72191,2,0,L|8:221,1,70,2|8,3:0|0:0,0:0:0:0:
295 | 122,316,72525,1,2,0:3:0:0:
296 | 122,316,72691,6,0,L|284:305,1,140,4|8,0:0|0:0,0:0:0:0:
297 | 352,298,73191,1,0,0:0:0:0:
298 | 308,217,73358,2,0,P|348:210|386:213,1,70,2|0,0:3|0:0,0:0:0:0:
299 | 458,139,73692,2,0,P|418:132|380:135,1,70,8|2,0:0|0:3,0:0:0:0:
300 | 268,109,74025,6,0,B|224:114|224:114|120:95,1,140,4|8,0:0|0:0,0:0:0:0:
301 | 41,75,74525,1,0,0:0:0:0:
302 | 28,170,74691,2,0,L|27:245,1,70,2|0,0:3|0:0,0:0:0:0:
303 | 119,220,75025,2,0,L|118:295,1,70,8|2,0:0|0:3,0:0:0:0:
304 | 211,335,75358,6,0,P|258:343|329:280,2,140,2|8|2,0:2|0:0|0:3,0:0:0:0:
305 | 243,249,76191,1,2,2:0:0:0:
306 | 217,161,76358,2,0,L|295:156,1,70,8|2,0:0|0:2,0:0:0:0:
307 | 174,83,76691,6,0,L|96:78,1,70,8|0,0:0|0:0,0:0:0:0:
308 | 245,16,77025,1,8,0:0:0:0:
309 | 245,16,77108,1,0,0:0:0:0:
310 | 245,16,77191,1,0,0:0:0:0:
311 | 339,63,77358,2,0,P|385:52|418:55,1,70,8|0,0:0|0:0,0:0:0:0:
312 | 285,151,77691,2,0,P|239:162|206:159,1,70,8|0,0:0|0:0,0:0:0:0:
313 | 329,251,78025,6,0,P|375:239|464:261,1,140,2|4,0:3|0:3,0:0:0:0:
314 | 294,359,78525,2,0,P|228:380|159:368,1,140,2|4,0:3|0:3,0:0:0:0:
315 | 227,220,79025,1,4,0:0:0:0:
316 | 256,192,79108,12,0,80691,0:0:0:0:
317 |
--------------------------------------------------------------------------------
/slider/example_data/beatmaps/Remo Prototype[CV Hanamori Yumiri] - Sendan Life (Narcissu) [Easy].osu:
--------------------------------------------------------------------------------
1 | osu file format v14
2 |
3 | [General]
4 | AudioFilename: life.mp3
5 | AudioLeadIn: 0
6 | PreviewTime: 53580
7 | Countdown: 0
8 | SampleSet: Soft
9 | StackLeniency: 0.7
10 | Mode: 0
11 | LetterboxInBreaks: 0
12 | WidescreenStoryboard: 1
13 |
14 | [Editor]
15 | DistanceSpacing: 1
16 | BeatDivisor: 2
17 | GridSize: 4
18 | TimelineZoom: 0.4999998
19 |
20 | [Metadata]
21 | Title:Sendan Life
22 | TitleUnicode:センダンライフ
23 | Artist:Remo Prototype[CV: Hanamori Yumiri]
24 | ArtistUnicode:リモ Prototype[CV:花守ゆみり]
25 | Creator:Narcissu
26 | Version:Easy
27 | Source:ガラスの花と壊す世界
28 | Tags:Little CloudSplash16 Crystal vocaloid Chukka やしきん yashikin Glass no Hana to Kowasu Sekai GARAKOWA Restore the World Vitreous Flower Destroy the World
29 | BeatmapID:896390
30 | BeatmapSetID:411894
31 |
32 | [Difficulty]
33 | HPDrainRate:3
34 | CircleSize:3
35 | OverallDifficulty:3
36 | ApproachRate:4
37 | SliderMultiplier:1.05
38 | SliderTickRate:1
39 |
40 | [Events]
41 | //Background and Video events
42 | 0,0,"BG.png",0,0
43 | //Break Periods
44 | //Storyboard Layer 0 (Background)
45 | //Storyboard Layer 1 (Fail)
46 | //Storyboard Layer 2 (Pass)
47 | //Storyboard Layer 3 (Foreground)
48 | //Storyboard Sound Samples
49 |
50 | [TimingPoints]
51 | 6664,264.31718061674,4,2,2,60,1,0
52 | 6664,-200,4,2,2,60,0,0
53 | 11950,-200,4,2,2,70,0,0
54 | 20408,-200,4,2,2,60,0,0
55 | 37324,-200,4,2,2,40,0,0
56 | 45650,-200,4,2,2,60,0,0
57 | 54241,-200,4,2,2,70,0,1
58 | 71157,-200,4,2,2,60,0,0
59 |
60 |
61 | [Colours]
62 | Combo1 : 255,128,255
63 | Combo2 : 128,255,255
64 | Combo3 : 255,255,128
65 | Combo4 : 128,128,255
66 |
67 | [HitObjects]
68 | 256,264,7721,5,0,1:0:0:0:
69 | 432,324,8646,2,0,L|420:208,1,105,0|0,1:0|1:0,0:0:0:0:
70 | 456,92,9835,2,0,P|404:112|336:108,1,105,0|0,1:0|1:0,0:0:0:0:
71 | 304,52,10760,2,0,L|172:40,1,131.25,0|0,1:0|1:0,0:0:0:0:
72 | 80,92,11950,6,0,P|68:140|84:204,1,105,4|0,1:0|1:0,0:0:0:0:
73 | 172,244,13007,2,0,L|180:348,1,105,0|0,1:0|1:0,0:0:0:0:
74 | 272,296,14064,2,0,P|320:284|376:292,1,105,0|0,1:0|1:0,0:0:0:0:
75 | 464,348,15122,1,0,1:0:0:0:
76 | 472,244,15650,1,0,1:0:0:0:
77 | 388,180,16179,6,0,L|392:72,1,105,0|0,1:0|1:0,0:0:0:0:
78 | 288,60,17236,2,0,L|284:168,1,105,0|0,1:0|1:0,0:0:0:0:
79 | 192,112,18293,2,0,P|140:108|84:136,1,105,0|0,1:0|1:0,0:0:0:0:
80 | 40,188,19219,2,0,L|32:320,1,131.25,4|2,1:0|0:0,0:0:0:0:
81 | 132,348,20408,6,0,B|168:324|168:324|340:316,1,210,4|0,1:0|3:0,0:0:0:0:
82 | 428,360,21994,1,0,0:0:0:0:
83 | 504,288,22523,2,0,P|516:236|504:172,1,105,2|2,3:2|0:0,0:0:0:0:
84 | 428,120,23580,2,0,L|304:120,1,105,2|0,3:2|0:0,0:0:0:0:
85 | 252,44,24637,6,0,P|160:24|48:72,1,210,2|2,3:2|3:2,0:0:0:0:
86 | 40,168,26223,1,0,0:0:0:0:
87 | 140,204,26752,2,0,P|156:252|144:316,1,105,2|2,3:2|0:0,0:0:0:0:
88 | 48,269,27809,2,0,P|32:221|44:157,1,105,0|8,3:0|0:0,0:0:0:0:
89 | 128,112,28866,6,0,P|232:114|320:56,1,210,4|2,1:0|3:2,0:0:0:0:
90 | 424,64,30452,1,0,0:0:0:0:
91 | 500,136,30981,2,0,L|508:244,1,105,0|2,3:0|0:0,0:0:0:0:
92 | 408,272,32038,2,0,L|400:164,1,105,2|0,3:2|0:0,0:0:0:0:
93 | 304,208,33095,6,0,L|88:200,1,210,2|2,3:2|3:2,0:0:0:0:
94 | 20,276,34681,1,2,0:0:0:0:
95 | 100,348,35210,2,0,L|216:336,1,105,0|2,3:0|0:0,0:0:0:0:
96 | 284,268,36267,1,0,0:0:0:0:
97 | 376,316,36796,1,2,0:0:0:0:
98 | 476,280,37324,6,0,P|508:212|500:120,2,157.5,2|0|8,3:2|3:0|0:0,0:0:0:0:
99 | 412,196,39439,2,0,P|386:125|315:65,2,157.5,0|0|8,3:0|3:0|0:0,0:0:0:0:
100 | 368,292,41553,6,0,B|324:316|324:316|256:320,1,105,0|0,3:0|0:0,0:0:0:0:
101 | 168,352,42611,2,0,L|60:344,1,105,0|0,3:0|3:0,0:0:0:0:
102 | 44,240,43668,2,0,P|56:164|20:88,2,157.5,0|0|8,3:0|3:0|0:0,0:0:0:0:
103 | 104,292,45650,6,0,L|248:296,1,131.25,4|2,0:1|3:2,0:0:0:0:
104 | 312,368,46840,2,0,P|344:308|328:256,1,105,2|0,3:2|3:0,0:0:0:0:
105 | 288,212,47765,2,0,L|292:76,1,131.25,6|2,0:0|3:2,0:0:0:0:
106 | 392,48,48954,2,0,L|400:168,1,105,4|0,3:1|3:0,0:0:0:0:
107 | 468,192,49879,6,0,P|488:264|464:324,1,131.25,4|2,0:0|3:2,0:0:0:0:
108 | 372,276,51069,2,0,L|264:284,1,105,2|0,3:2|3:0,0:0:0:0:
109 | 192,356,52126,2,0,B|148:340|148:340|100:352|100:352|48:344|48:344|8:348,1,183.75,2|4,1:2|1:2,0:0:0:0:
110 | 100,248,53712,1,8,0:0:0:0:
111 | 0,212,54241,6,0,P|72:148|184:184,1,210,4|0,1:0|0:0,0:0:0:0:
112 | 204,276,55826,1,2,3:2:0:0:
113 | 284,208,56355,2,0,L|288:92,1,105,2|2,3:2|3:2,0:0:0:0:
114 | 356,24,57412,2,0,P|408:12|464:24,1,105,2|2,3:2|3:2,0:0:0:0:
115 | 412,116,58470,5,2,3:2:0:0:
116 | 476,200,58998,1,2,3:2:0:0:
117 | 396,268,59527,2,0,P|392:312|412:360,2,78.75,2|2|10,3:2|3:2|0:0,0:0:0:0:
118 | 296,228,60849,2,0,L|192:232,1,105,10|10,0:0|0:0,0:0:0:0:
119 | 180,336,61906,2,0,L|76:344,1,105,10|10,0:0|0:0,0:0:0:0:
120 | 28,320,62699,6,0,P|4:224|32:116,1,210,4|0,1:0|3:0,0:0:0:0:
121 | 112,52,64285,1,2,3:2:0:0:
122 | 192,120,64813,2,0,P|244:120|292:100,1,105,2|2,3:2|3:2,0:0:0:0:
123 | 356,16,65871,2,0,L|472:12,1,105,2|2,3:2|3:2,0:0:0:0:
124 | 452,116,66928,6,0,L|464:208,2,78.75,2|2|2,1:2|1:2|1:2,0:0:0:0:
125 | 356,72,68249,1,0,1:0:0:0:
126 | 268,132,68778,2,0,P|284:248|244:332,1,210,2|8,1:2|0:0,0:0:0:0:
127 | 196,308,70100,2,0,L|84:312,1,105,0|8,1:0|0:0,0:0:0:0:
128 | 24,232,71157,6,0,P|4:184|8:116,1,105,4|0,1:0|1:0,0:0:0:0:
129 | 76,56,72214,2,0,L|188:60,1,105,0|0,1:0|1:0,0:0:0:0:
130 | 280,24,73271,2,0,P|328:12|384:20,1,105,0|0,1:0|1:0,0:0:0:0:
131 | 448,104,74329,1,0,1:0:0:0:
132 | 448,208,74857,1,0,1:0:0:0:
133 | 356,264,75386,6,0,L|364:376,1,105,0|0,1:0|1:0,0:0:0:0:
134 | 260,340,76443,2,0,L|252:228,1,105,0|0,1:0|1:0,0:0:0:0:
135 | 196,148,77500,2,0,P|148:136|88:152,1,105,0|0,1:0|1:0,0:0:0:0:
136 | 40,208,78426,2,0,L|36:348,1,131.25,4|2,1:0|0:0,0:0:0:0:
137 | 136,308,79615,5,4,0:0:0:0:
138 |
--------------------------------------------------------------------------------
/slider/example_data/beatmaps/Remo Prototype[CV Hanamori Yumiri] - Sendan Life (Narcissu) [Little's Hard].osu:
--------------------------------------------------------------------------------
1 | osu file format v14
2 |
3 | [General]
4 | AudioFilename: life.mp3
5 | AudioLeadIn: 0
6 | PreviewTime: 53580
7 | Countdown: 0
8 | SampleSet: Soft
9 | StackLeniency: 0.7
10 | Mode: 0
11 | LetterboxInBreaks: 0
12 | WidescreenStoryboard: 1
13 |
14 | [Editor]
15 | DistanceSpacing: 1.5
16 | BeatDivisor: 4
17 | GridSize: 4
18 | TimelineZoom: 1.5
19 |
20 | [Metadata]
21 | Title:Sendan Life
22 | TitleUnicode:センダンライフ
23 | Artist:Remo Prototype[CV: Hanamori Yumiri]
24 | ArtistUnicode:リモ Prototype[CV:花守ゆみり]
25 | Creator:Narcissu
26 | Version:Little's Hard
27 | Source:ガラスの花と壊す世界
28 | Tags:Little CloudSplash16 Crystal vocaloid Chukka やしきん yashikin Glass no Hana to Kowasu Sekai GARAKOWA Restore the World Vitreous Flower Destroy the World
29 | BeatmapID:899533
30 | BeatmapSetID:411894
31 |
32 | [Difficulty]
33 | HPDrainRate:5.5
34 | CircleSize:4
35 | OverallDifficulty:6.2
36 | ApproachRate:7.8
37 | SliderMultiplier:1.1
38 | SliderTickRate:1
39 |
40 | [Events]
41 | //Background and Video events
42 | 0,0,"BG.png",0,0
43 | //Break Periods
44 | //Storyboard Layer 0 (Background)
45 | //Storyboard Layer 1 (Fail)
46 | //Storyboard Layer 2 (Pass)
47 | //Storyboard Layer 3 (Foreground)
48 | //Storyboard Sound Samples
49 |
50 | [TimingPoints]
51 | 6664,264.31718061674,4,2,1,60,1,0
52 | 11950,-100,4,2,1,70,0,0
53 | 20408,-100,4,2,1,60,0,0
54 | 37324,-125,4,2,1,40,0,0
55 | 37589,-125,4,3,1,40,0,0
56 | 37655,-125,4,2,1,40,0,0
57 | 38382,-125,4,3,1,40,0,0
58 | 38448,-125,4,2,1,40,0,0
59 | 39703,-125,4,3,1,40,0,0
60 | 39769,-125,4,2,1,40,0,0
61 | 39967,-125,4,3,1,40,0,0
62 | 40034,-125,4,2,1,40,0,0
63 | 41818,-125,4,3,1,40,0,0
64 | 41884,-125,4,2,1,40,0,0
65 | 42875,-125,4,3,1,40,0,0
66 | 42941,-125,4,2,1,40,0,0
67 | 43932,-125,4,3,1,40,0,0
68 | 43998,-125,4,2,1,40,0,0
69 | 45650,-100,4,2,1,60,0,0
70 | 54241,-100,4,2,1,70,0,1
71 | 67192,-100,4,3,1,70,0,1
72 | 67258,-100,4,2,1,70,0,1
73 | 71157,-100,4,2,1,60,0,0
74 |
75 |
76 | [Colours]
77 | Combo1 : 255,128,255
78 | Combo2 : 128,255,255
79 | Combo3 : 255,255,128
80 | Combo4 : 128,128,255
81 |
82 | [HitObjects]
83 | 165,67,7721,5,0,1:0:0:0:
84 | 204,256,7985,1,0,1:0:0:0:
85 | 275,75,8249,1,0,1:0:0:0:
86 | 257,172,8382,1,0,1:0:0:0:
87 | 68,212,8646,5,0,1:0:0:0:
88 | 257,172,8910,1,0,1:0:0:0:
89 | 76,102,9174,1,0,1:0:0:0:
90 | 204,256,9439,1,0,1:0:0:0:
91 | 204,256,9571,2,0,P|250:227|304:231,1,110,8|0,0:1|1:0,0:0:0:0:
92 | 466,336,10100,5,0,1:0:0:0:
93 | 396,156,10363,1,0,1:0:0:0:
94 | 452,238,10496,1,0,1:0:0:0:
95 | 272,308,10760,5,0,1:0:0:0:
96 | 452,238,11025,1,0,1:0:0:0:
97 | 272,308,11289,1,0,1:0:0:0:
98 | 272,308,11421,2,0,P|226:279|172:283,1,110,8|2,0:1|0:0,0:0:0:0:
99 | 172,282,11950,6,0,L|180:172,1,110,4|8,1:0|0:0,0:0:0:0:
100 | 268,36,12478,2,0,L|276:145,1,110,0|8,1:0|0:0,0:0:0:0:
101 | 324,212,12875,1,0,1:0:0:0:
102 | 324,212,13007,6,0,B|368:231|387:202|431:218,1,110,0|8,1:0|0:0,0:0:0:0:
103 | 500,264,13404,1,0,0:0:0:0:
104 | 500,264,13536,2,0,P|501:292|493:318,1,55,0|0,1:0|1:0,0:0:0:0:
105 | 432,218,13800,2,0,P|431:190|439:164,1,55,8|0,0:0|1:0,0:0:0:0:
106 | 484,95,14064,6,0,P|436:120|384:106,1,110,0|8,1:0|0:0,0:0:0:0:
107 | 228,156,14593,2,0,P|180:131|128:145,1,110,0|8,1:0|0:0,0:0:0:0:
108 | 68,200,14989,1,0,1:0:0:0:
109 | 68,200,15122,6,0,L|76:309,1,110,0|8,1:0|0:0,0:0:0:0:
110 | 144,356,15518,1,0,0:0:0:0:
111 | 144,356,15650,2,0,P|171:357|197:349,1,55,0|0,1:0|1:0,0:0:0:0:
112 | 274,324,15915,2,0,P|302:321|328:329,1,55,8|0,0:0|1:0,0:0:0:0:
113 | 412,328,16179,6,0,P|437:280|423:228,1,110,0|8,1:0|0:0,0:0:0:0:
114 | 280,176,16708,2,0,P|225:184|171:175,1,110,0|8,1:0|0:0,0:0:0:0:
115 | 100,136,17104,1,0,1:0:0:0:
116 | 100,136,17236,6,0,L|96:26,1,110,0|8,1:0|0:0,0:0:0:0:
117 | 260,52,17765,2,0,P|237:67|210:73,1,55,0|0,1:0|1:0,0:0:0:0:
118 | 230,154,18029,2,0,P|253:169|280:176,1,55,8|0,0:0|1:0,0:0:0:0:
119 | 351,135,18293,6,0,P|361:189|337:237,1,110,0|8,1:0|0:0,0:0:0:0:
120 | 180,288,18822,2,0,L|108:276,2,55,0|0|8,1:0|1:0|0:0,0:0:0:0:
121 | 247,336,19219,6,0,P|299:317|352:326,1,110,4|0,1:0|1:0,0:0:0:0:
122 | 424,288,19615,2,0,P|433:262|432:234,1,55,8|0,0:0|1:0,0:0:0:0:
123 | 384,168,19879,2,0,P|391:83|439:153,1,220,2|4,0:0|1:0,0:0:0:0:
124 | 436,156,20672,5,10,0:0:0:0:
125 | 432,160,20937,2,0,L|313:151,1,110,2|8,0:0|0:0,0:0:0:0:
126 | 188,243,21465,2,0,P|137:262|87:242,1,110,2|8,3:2|0:0,0:0:0:0:
127 | 44,172,21862,2,0,L|56:48,1,110,2|0,3:2|0:0,0:0:0:0:
128 | 54,62,22258,1,10,3:2:0:0:
129 | 220,84,22523,6,0,P|246:87|274:83,1,55,2|2,3:2|0:0,0:0:0:0:
130 | 352,64,22787,1,10,0:0:0:0:
131 | 219,209,23051,2,0,P|244:219|272:223,1,55,2|2,0:0|3:2,0:0:0:0:
132 | 352,224,23315,1,10,0:0:0:0:
133 | 352,224,23580,2,0,P|369:275|350:325,1,110,2|8,3:2|0:0,0:0:0:0:
134 | 272,352,23976,2,0,L|162:355,1,110,2|0,3:2|3:0,0:0:0:0:
135 | 80,356,24373,1,10,0:0:0:0:
136 | 12,204,24637,6,0,B|24:172|24:172|17:96,1,110,2|10,3:2|0:0,0:0:0:0:
137 | 160,12,25166,2,0,B|148:44|148:44|154:119,1,110,2|8,0:0|0:0,0:0:0:0:
138 | 320,116,25694,2,0,P|360:112|400:168,1,110,2|10,3:2|0:0,0:0:0:0:
139 | 368,240,26091,2,0,L|252:232,1,110,2|2,3:2|3:2,0:0:0:0:
140 | 192,280,26487,1,8,0:0:0:0:
141 | 332,368,26752,6,0,L|339:313,1,55,2|0,3:2|0:0,0:0:0:0:
142 | 312,236,27016,2,0,L|304:181,1,55,10|0,0:0|3:2,0:0:0:0:
143 | 352,116,27280,2,0,P|304:141|252:127,1,110,2|10,0:0|0:0,0:0:0:0:
144 | 168,124,27677,2,0,L|160:233,2,110,2|2|2,0:0|0:0|0:0,0:0:0:0:
145 | 172,40,28338,1,8,0:0:0:0:
146 | 28,120,28602,1,8,0:0:0:0:
147 | 180,180,28866,6,0,P|232:166|279:191,1,110,4|10,1:0|0:0,0:0:0:0:
148 | 416,284,29395,2,0,L|424:168,1,110,2|10,0:0|0:0,0:0:0:0:
149 | 368,20,29923,2,0,P|338:64|345:117,1,110,2|10,3:2|0:0,0:0:0:0:
150 | 334,199,30320,2,0,L|279:191,1,55,2|0,3:2|0:0,0:0:0:0:
151 | 240,264,30584,1,2,3:2:0:0:
152 | 240,264,30716,2,0,L|294:271,1,55,8|2,0:0|0:0,0:0:0:0:
153 | 156,252,30981,5,0,0:0:0:0:
154 | 124,173,31245,1,10,0:0:0:0:
155 | 176,105,31509,1,2,0:0:0:0:
156 | 260,116,31774,1,10,0:0:0:0:
157 | 292,194,32038,6,0,P|328:212|404:192,1,110,2|10,3:2|0:0,0:0:0:0:
158 | 476,184,32434,2,0,L|465:293,1,110,2|2,3:2|3:2,0:0:0:0:
159 | 404,348,32831,2,0,P|377:340|350:339,1,55,10|2,0:0|0:0,0:0:0:0:
160 | 268,348,33095,5,2,3:2:0:0:
161 | 116,288,33360,1,10,0:0:0:0:
162 | 56,344,33492,1,0,3:0:0:0:
163 | 116,288,33624,2,0,P|123:234|104:182,1,110,2|10,0:0|0:0,0:0:0:0:
164 | 27,75,34152,2,0,P|77:97|130:86,1,110,2|10,3:2|0:0,0:0:0:0:
165 | 212,92,34549,2,0,P|261:70|314:81,1,110,2|0,3:2|3:0,0:0:0:0:
166 | 396,80,34945,2,0,L|403:25,1,55,10|2,0:0|0:0,0:0:0:0:
167 | 456,136,35210,5,0,3:0:0:0:
168 | 364,272,35474,2,0,P|311:261|265:289,1,110,10|2,0:0|0:0,0:0:0:0:
169 | 188,260,35871,2,0,L|191:205,1,55,2|8,3:2|0:0,0:0:0:0:
170 | 252,152,36135,2,0,P|199:162|153:134,1,110,2|2,3:2|3:2,0:0:0:0:
171 | 75,164,36532,2,0,L|78:218,1,55,0|2,0:0|3:2,0:0:0:0:
172 | 84,300,36796,1,2,0:0:0:0:
173 | 240,352,37060,1,2,3:2:0:0:
174 | 240,352,37192,1,0,3:0:0:0:
175 | 240,352,37324,6,0,P|295:320|359:331,1,132,2|8,3:2|0:1,0:0:0:0:
176 | 404,204,38117,2,0,L|272:215,1,132,0|0,3:0|3:0,0:0:0:0:
177 | 184,116,38910,2,0,L|180:203,1,88,8|0,0:1|3:0,0:0:0:0:
178 | 168,292,39439,6,0,P|113:325|53:305,2,132,0|8|0,3:0|0:1|3:0,0:0:0:0:
179 | 144,208,40496,2,0,L|118:172,2,44,0|0|0,0:0|3:0|0:0,0:0:0:0:
180 | 228,227,41025,2,0,P|239:186|230:143,1,88,8|0,0:1|3:0,0:0:0:0:
181 | 168,80,41553,6,0,P|227:105|287:84,1,132,0|8,3:0|0:1,0:0:0:0:
182 | 324,56,42082,1,0,0:0:0:0:
183 | 412,68,42346,1,0,3:0:0:0:
184 | 412,68,42611,2,0,B|406:100|406:100|415:199,1,132,0|8,3:0|0:1,0:0:0:0:
185 | 419,244,43139,1,0,0:0:0:0:
186 | 344,292,43404,1,0,3:0:0:0:
187 | 344,292,43668,6,0,P|285:265|227:291,1,132,0|8,3:0|0:1,0:0:0:0:
188 | 96,284,44461,1,0,3:0:0:0:
189 | 96,284,44725,2,0,P|80:244|90:202,1,88,0|0,0:0|0:0,0:0:0:0:
190 | 156,144,45254,2,0,P|198:152|240:140,1,88,8|8,0:1|0:1,0:0:0:0:
191 | 320,120,45650,6,0,L|323:229,1,110,4|2,0:1|3:2,0:0:0:0:
192 | 368,300,46047,2,0,L|422:305,1,55,10|2,0:0|0:0,0:0:0:0:
193 | 292,328,46311,2,0,L|237:322,1,55,2|2,3:2|3:2,0:0:0:0:
194 | 156,312,46575,1,10,0:0:0:0:
195 | 39,196,46840,6,0,P|87:170|139:184,1,110,2|10,3:2|0:0,0:0:0:0:
196 | 219,164,47236,2,0,P|231:139|233:111,1,55,2|0,0:0|3:0,0:0:0:0:
197 | 200,244,47501,2,0,P|202:271|213:296,1,55,2|8,3:2|0:0,0:0:0:0:
198 | 288,332,47765,6,0,L|397:329,1,110,6|2,0:0|3:2,0:0:0:0:
199 | 480,324,48161,1,2,0:0:0:0:
200 | 492,244,48293,1,2,0:0:0:0:
201 | 416,172,48426,2,0,L|412:226,1,55,2|2,3:2|3:2,0:0:0:0:
202 | 332,248,48690,2,0,L|328:193,1,55,2|2,0:0|0:0,0:0:0:0:
203 | 284,124,48954,6,0,B|236:108|192:128|192:128|176:122,1,110,4|8,3:1|0:0,0:0:0:0:
204 | 96,140,49351,2,0,P|88:166|89:193,1,55,2|0,0:0|3:0,0:0:0:0:
205 | 156,240,49615,2,0,P|163:266|162:293,1,55,2|8,3:2|0:0,0:0:0:0:
206 | 101,348,49879,6,0,P|148:374|201:365,1,110,4|0,0:0|3:0,0:0:0:0:
207 | 248,296,50276,2,0,L|304:296,1,55,10|2,0:0|0:0,0:0:0:0:
208 | 384,296,50540,1,2,3:2:0:0:
209 | 476,160,50804,1,10,0:0:0:0:
210 | 500,240,50937,1,2,0:0:0:0:
211 | 476,160,51069,6,0,B|448:144|448:144|370:144,1,110,2|10,3:2|0:0,0:0:0:0:
212 | 288,144,51465,1,2,0:0:0:0:
213 | 128,108,51730,2,0,P|116:83|114:55,2,55,2|10|2,3:2|3:2|0:0,0:0:0:0:
214 | 184,168,52126,5,2,1:2:0:0:
215 | 68,284,52390,1,2,1:2:0:0:
216 | 184,168,52655,1,2,1:2:0:0:
217 | 68,284,52919,1,2,3:2:0:0:
218 | 141,326,53051,6,0,B|168:328|192:320|192:320|196:328|196:328|220:320|244:325,1,110,4|0,1:2|0:0,0:0:0:0:
219 | 316,284,53448,2,0,P|361:254|413:266,2,110,2|8|8,0:0|0:0|0:0,0:0:0:0:
220 | 475,320,54241,6,0,P|495:269|480:217,1,110,4|10,1:0|0:0,0:0:0:0:
221 | 348,119,54769,2,0,P|293:128|239:121,1,110,2|10,0:0|0:0,0:0:0:0:
222 | 156,120,55166,2,0,P|129:128|107:143,1,55,2|0,0:0|0:0,0:0:0:0:
223 | 64,213,55430,1,2,0:0:0:0:
224 | 64,213,55562,2,0,L|68:273,1,55,8|2,0:0|0:0,0:0:0:0:
225 | 120,332,55826,2,0,P|152:312|228:324,1,110,2|10,0:0|0:0,0:0:0:0:
226 | 384,340,56355,6,0,P|408:304|396:228,1,110,2|10,3:2|0:0,0:0:0:0:
227 | 288,120,56884,2,0,L|291:229,1,110,2|8,3:2|0:0,0:0:0:0:
228 | 252,299,57280,2,0,P|225:292|198:293,1,55,2|0,0:0|0:0,0:0:0:0:
229 | 70,262,57545,2,0,P|97:263|124:256,1,55,2|8,3:2|0:0,0:0:0:0:
230 | 192,212,57809,1,2,0:0:0:0:
231 | 192,212,57941,2,0,L|190:157,1,55,2|2,3:2|3:2,0:0:0:0:
232 | 118,61,58205,2,0,L|120:116,1,55,10|0,0:0|0:0,0:0:0:0:
233 | 204,76,58470,6,0,P|236:56|312:68,1,110,2|10,3:2|0:0,0:0:0:0:
234 | 432,168,58998,1,2,3:2:0:0:
235 | 327,294,59263,1,10,0:0:0:0:
236 | 327,294,59527,2,0,P|295:274|219:286,1,110,2|8,3:2|0:0,0:0:0:0:
237 | 144,276,59923,2,0,P|132:248|132:212,1,55,2|0,3:2|0:0,0:0:0:0:
238 | 208,76,60320,1,10,0:0:0:0:
239 | 52,132,60584,5,0,0:0:0:0:
240 | 212,180,60849,2,0,L|321:169,1,110,10|0,0:0|0:0,0:0:0:0:
241 | 412,308,61377,1,10,0:0:0:0:
242 | 412,308,61509,2,0,P|380:328|304:316,1,110,0|2,0:0|0:0,0:0:0:0:
243 | 240,276,61906,1,10,0:0:0:0:
244 | 240,276,62038,1,10,0:0:0:0:
245 | 132,292,62170,2,0,P|109:276|93:253,1,55,10|10,0:0|1:2,0:0:0:0:
246 | 28,204,62434,2,0,P|30:176|42:151,1,55,10|2,1:2|1:2,0:0:0:0:
247 | 100,92,62699,6,0,B|128:88|128:88|180:96|180:96|208:92,1,110,4|10,1:0|0:0,0:0:0:0:
248 | 368,52,63227,2,0,P|324:76|312:144,1,110,2|10,3:2|0:0,0:0:0:0:
249 | 356,200,63624,2,0,P|364:236|360:268,1,55,2|0,0:2|0:0,0:0:0:0:
250 | 316,320,63888,2,0,P|288:320|256:332,1,55,2|8,0:0|0:0,0:0:0:0:
251 | 180,336,64152,1,2,0:0:0:0:
252 | 180,336,64285,2,0,P|127:330|90:291,1,110,2|10,3:2|0:0,0:0:0:0:
253 | 204,172,64813,6,0,L|313:179,1,110,2|10,3:2|0:0,0:0:0:0:
254 | 428,60,65342,2,0,B|400:56|400:56|348:64|348:64|320:60,1,110,2|10,3:2|0:0,0:0:0:0:
255 | 244,92,65738,2,0,L|191:75,1,55,6|0,0:0|0:0,0:0:0:0:
256 | 128,132,66003,2,0,L|75:115,1,55,2|10,3:2|0:0,0:0:0:0:
257 | 204,172,66267,1,0,0:0:0:0:
258 | 204,172,66399,2,0,P|223:222|206:272,1,110,2|10,3:2|0:0,0:0:0:0:
259 | 52,332,66928,6,0,P|109:277|185:299,1,165,2|2,1:2|1:2,0:0:0:0:
260 | 432,288,67721,2,0,P|389:254|335:255,2,110,2|0|0,1:2|0:0|0:0,0:0:0:0:
261 | 280,352,68514,1,0,1:0:0:0:
262 | 220,196,68778,1,2,0:0:0:0:
263 | 384,220,69042,6,0,P|341:253|287:252,1,110,0|8,0:0|0:0,0:0:0:0:
264 | 124,228,69571,2,0,P|166:194|220:196,1,110,8|8,0:0|0:0,0:0:0:0:
265 | 316,176,69967,1,0,0:0:0:0:
266 | 316,176,70100,2,0,L|324:60,1,110,0|0,1:0|1:0,0:0:0:0:
267 | 160,36,70628,2,0,L|162:63,3,27.5,8|0|8|0,0:0|0:0|0:0|0:0,0:0:0:0:
268 | 188,96,70893,2,0,L|185:123,3,27.5,8|0|8|0,0:0|0:0|0:0|0:0,0:0:0:0:
269 | 164,156,71157,6,0,P|140:172|56:160,1,110,4|8,1:0|0:0,0:0:0:0:
270 | 24,240,71553,1,0,0:0:0:0:
271 | 24,240,71686,2,0,L|30:294,1,55,0|0,1:0|1:0,0:0:0:0:
272 | 108,320,71950,2,0,L|114:265,1,55,8|0,0:0|1:0,0:0:0:0:
273 | 192,240,72214,6,0,P|216:224|300:236,1,110,0|8,1:0|0:0,0:0:0:0:
274 | 332,156,72610,1,0,0:0:0:0:
275 | 332,156,72743,2,0,L|325:101,1,55,0|0,1:0|1:0,0:0:0:0:
276 | 248,76,73007,2,0,L|241:130,1,55,8|0,0:0|1:0,0:0:0:0:
277 | 196,200,73271,6,0,L|215:308,1,110,0|8,1:0|0:0,0:0:0:0:
278 | 288,348,73668,1,0,0:0:0:0:
279 | 288,348,73800,2,0,P|314:338|341:335,1,55,0|0,1:0|1:0,0:0:0:0:
280 | 476,336,74064,2,0,P|449:333|424:324,1,55,8|0,0:0|1:0,0:0:0:0:
281 | 372,260,74329,6,0,L|352:151,1,110,0|8,1:0|0:0,0:0:0:0:
282 | 280,111,74726,1,0,0:0:0:0:
283 | 280,111,74858,2,0,P|254:120|227:123,1,55,0|0,1:0|0:0,0:0:0:0:
284 | 91,123,75122,2,0,P|118:125|143:135,1,55,8|0,0:0|1:0,0:0:0:0:
285 | 195,199,75386,6,0,P|198:253|165:296,1,110,0|8,1:0|0:0,0:0:0:0:
286 | 84,312,75782,1,0,0:0:0:0:
287 | 84,312,75915,2,0,L|67:259,1,55,0|0,1:0|1:0,0:0:0:0:
288 | 91,123,76179,2,0,L|107:175,1,55,8|0,0:0|1:0,0:0:0:0:
289 | 196,256,76443,6,0,P|247:272|296:251,1,110,0|8,1:0|0:0,0:0:0:0:
290 | 344,184,76839,1,0,0:0:0:0:
291 | 380,260,76972,2,0,L|364:312,1,55,0|0,1:0|1:0,0:0:0:0:
292 | 243,196,77236,2,0,L|227:144,1,55,8|0,0:0|1:0,0:0:0:0:
293 | 340,76,77501,6,0,B|352:112|352:112|344:184,1,110,0|8,1:0|0:0,0:0:0:0:
294 | 302,261,77897,1,0,0:0:0:0:
295 | 302,261,78029,2,0,L|310:317,2,55,0|0|8,1:0|1:0|0:0,0:0:0:0:
296 | 243,196,78426,6,0,P|199:176|123:196,1,110,4|0,1:0|1:0,0:0:0:0:
297 | 59,188,78822,2,0,P|43:165|38:138,1,55,8|0,0:0|1:0,0:0:0:0:
298 | 103,256,79086,2,0,P|97:282|82:305,1,55,2|2,0:0|0:0,0:0:0:0:
299 | 139,185,79351,5,2,0:0:0:0:
300 | 247,233,79483,1,2,0:0:0:0:
301 | 199,341,79615,1,4,0:0:0:0:
302 |
--------------------------------------------------------------------------------
/slider/example_data/beatmaps/Remo Prototype[CV Hanamori Yumiri] - Sendan Life (Narcissu) [Normal].osu:
--------------------------------------------------------------------------------
1 | osu file format v14
2 |
3 | [General]
4 | AudioFilename: life.mp3
5 | AudioLeadIn: 0
6 | PreviewTime: 53580
7 | Countdown: 0
8 | SampleSet: Soft
9 | StackLeniency: 0.7
10 | Mode: 0
11 | LetterboxInBreaks: 0
12 | WidescreenStoryboard: 1
13 |
14 | [Editor]
15 | DistanceSpacing: 1.2
16 | BeatDivisor: 2
17 | GridSize: 4
18 | TimelineZoom: 0.7999998
19 |
20 | [Metadata]
21 | Title:Sendan Life
22 | TitleUnicode:センダンライフ
23 | Artist:Remo Prototype[CV: Hanamori Yumiri]
24 | ArtistUnicode:リモ Prototype[CV:花守ゆみり]
25 | Creator:Narcissu
26 | Version:Normal
27 | Source:ガラスの花と壊す世界
28 | Tags:Little CloudSplash16 Crystal vocaloid Chukka やしきん yashikin Glass no Hana to Kowasu Sekai GARAKOWA Restore the World Vitreous Flower Destroy the World
29 | BeatmapID:895006
30 | BeatmapSetID:411894
31 |
32 | [Difficulty]
33 | HPDrainRate:4
34 | CircleSize:3.5
35 | OverallDifficulty:5
36 | ApproachRate:6
37 | SliderMultiplier:1
38 | SliderTickRate:1
39 |
40 | [Events]
41 | //Background and Video events
42 | 0,0,"BG.png",0,0
43 | //Break Periods
44 | //Storyboard Layer 0 (Background)
45 | //Storyboard Layer 1 (Fail)
46 | //Storyboard Layer 2 (Pass)
47 | //Storyboard Layer 3 (Foreground)
48 | //Storyboard Sound Samples
49 |
50 | [TimingPoints]
51 | 6664,264.31718061674,4,2,1,60,1,0
52 | 7721,-133.333333333333,4,2,1,60,0,0
53 | 11950,-125,4,2,1,70,0,0
54 | 19483,-125,4,3,1,70,0,0
55 | 19615,-125,4,2,1,70,0,0
56 | 20408,-133.333333333333,4,2,1,60,0,0
57 | 21994,-133.333333333333,4,3,1,60,0,0
58 | 22126,-133.333333333333,4,2,1,60,0,0
59 | 32567,-133.333333333333,4,3,1,60,0,0
60 | 32699,-133.333333333333,4,2,1,60,0,0
61 | 37324,-133.333333333333,4,2,1,40,0,0
62 | 37589,-133.333333333333,4,3,1,40,0,0
63 | 37721,-133.333333333333,4,2,1,40,0,0
64 | 38382,-133.333333333333,4,3,1,40,0,0
65 | 38514,-133.333333333333,4,2,1,40,0,0
66 | 39703,-133.333333333333,4,3,1,40,0,0
67 | 39835,-133.333333333333,4,2,1,40,0,0
68 | 40496,-133.333333333333,4,3,1,40,0,0
69 | 40628,-133.333333333333,4,2,1,40,0,0
70 | 41818,-133.333333333333,4,3,1,40,0,0
71 | 41950,-133.333333333333,4,2,1,40,0,0
72 | 42082,-133.333333333333,4,3,1,40,0,0
73 | 42214,-133.333333333333,4,2,1,40,0,0
74 | 42875,-133.333333333333,4,3,1,40,0,0
75 | 43007,-133.333333333333,4,2,1,40,0,0
76 | 43139,-133.333333333333,4,3,1,40,0,0
77 | 43271,-133.333333333333,4,2,1,40,0,0
78 | 43932,-133.333333333333,4,3,1,40,0,0
79 | 44064,-133.333333333333,4,2,1,40,0,0
80 | 44725,-133.333333333333,4,3,1,40,0,0
81 | 44857,-133.333333333333,4,2,1,40,0,0
82 | 45650,-133.333333333333,4,2,1,60,0,0
83 | 45915,-133.333333333333,4,3,1,60,0,0
84 | 46047,-133.333333333333,4,2,1,60,0,0
85 | 48029,-133.333333333333,4,3,1,60,0,0
86 | 48161,-133.333333333333,4,2,1,60,0,0
87 | 50144,-133.333333333333,4,3,1,60,0,0
88 | 50276,-133.333333333333,4,2,1,60,0,0
89 | 53315,-133.333333333333,4,3,1,60,0,0
90 | 53448,-133.333333333333,4,2,1,60,0,0
91 | 54241,-125,4,2,1,70,0,1
92 | 57545,-125,4,3,1,70,0,1
93 | 57677,-125,4,2,1,70,0,1
94 | 60056,-125,4,3,1,70,0,1
95 | 60188,-125,4,2,1,70,0,1
96 | 61113,-125,4,3,1,70,0,1
97 | 61245,-125,4,2,1,70,0,1
98 | 61641,-125,4,3,1,70,0,1
99 | 61774,-125,4,2,1,70,0,1
100 | 66003,-125,4,3,1,70,0,1
101 | 66135,-125,4,2,1,70,0,1
102 | 67985,-125,4,3,1,70,0,1
103 | 68117,-125,4,2,1,70,0,1
104 | 69042,-125,4,3,1,70,0,1
105 | 69175,-125,4,2,1,70,0,1
106 | 69571,-125,4,3,1,70,0,1
107 | 69703,-125,4,2,1,70,0,1
108 | 71157,-125,4,2,1,60,0,0
109 | 78690,-125,4,3,1,60,0,0
110 | 78822,-125,4,2,1,60,0,0
111 |
112 |
113 | [Colours]
114 | Combo1 : 255,128,255
115 | Combo2 : 128,255,255
116 | Combo3 : 255,255,128
117 | Combo4 : 128,128,255
118 |
119 | [HitObjects]
120 | 72,296,7721,6,0,B|148:308|148:308|268:276,1,187.500007152558,0|0,1:0|1:0,0:0:0:0:
121 | 336,320,8646,2,0,L|424:324,2,75.0000028610231,0|0|0,1:0|1:0|1:0,0:0:0:0:
122 | 332,228,9439,1,0,1:0:0:0:
123 | 332,228,9571,1,8,0:1:0:0:
124 | 420,216,9835,6,0,P|456:148|428:24,1,187.500007152558,0|0,1:0|1:0,0:0:0:0:
125 | 356,80,10760,2,0,B|208:84|208:84|168:60,1,187.500007152558,0|8,1:0|0:1,0:0:0:0:
126 | 100,112,11686,1,2,0:0:0:0:
127 | 28,48,11950,6,0,P|4:120|60:200,1,160,4|0,1:0|1:0,0:0:0:0:
128 | 136,204,12743,1,8,0:0:0:0:
129 | 76,280,13007,2,0,L|68:380,1,80,0|8,1:0|0:0,0:0:0:0:
130 | 164,376,13536,2,0,L|172:276,1,80,0|8,1:0|0:0,0:0:0:0:
131 | 256,256,14064,6,0,L|432:268,1,160,0|0,1:0|1:0,0:0:0:0:
132 | 496,212,14857,1,8,0:0:0:0:
133 | 408,172,15122,2,0,P|396:132|400:80,1,80,0|8,1:0|0:0,0:0:0:0:
134 | 476,40,15650,2,0,P|488:80|484:132,1,80,0|8,1:0|0:0,0:0:0:0:
135 | 396,94,16179,6,0,L|228:86,1,160,0|0,1:0|1:0,0:0:0:0:
136 | 164,24,16972,1,8,0:0:0:0:
137 | 72,44,17236,2,0,P|40:116|60:212,1,160,0|0,1:0|1:0,0:0:0:0:
138 | 128,252,18029,1,8,0:0:0:0:
139 | 208,200,18293,6,0,L|308:196,1,80,0|8,1:0|0:0,0:0:0:0:
140 | 352,268,18822,2,0,L|436:276,1,80,0|8,1:0|0:0,0:0:0:0:
141 | 472,252,19219,2,0,P|492:200|472:124,1,120,4|8,1:0|0:0,0:0:0:0:
142 | 396,96,19879,1,2,0:0:0:0:
143 | 300,112,20144,1,2,0:0:0:0:
144 | 232,52,20408,6,0,P|156:40|80:76,1,150.000005722046,4|2,1:0|0:0,0:0:0:0:
145 | 36,140,21201,1,8,0:0:0:0:
146 | 100,204,21465,2,0,P|104:268|72:336,2,112.500004291535,2|2|10,1:3|3:2|0:2,0:0:0:0:
147 | 36,140,22523,6,0,L|32:44,1,75.0000028610231,2|10,3:2|0:0,0:0:0:0:
148 | 120,40,23051,2,0,L|124:132,1,75.0000028610231,2|10,0:0|0:0,0:0:0:0:
149 | 208,144,23580,2,0,P|284:124|368:148,1,150.000005722046,2|0,3:2|0:0,0:0:0:0:
150 | 396,216,24373,1,10,0:0:0:0:
151 | 472,168,24637,6,0,L|476:16,2,150.000005722046,2|2|2,3:2|0:0|3:2,0:0:0:0:
152 | 396,216,25959,1,10,0:0:0:0:
153 | 476,260,26223,2,0,P|488:300|480:348,1,75.0000028610231,0|8,0:0|0:0,0:0:0:0:
154 | 400,308,26752,5,2,3:2:0:0:
155 | 316,272,27016,2,0,L|232:268,1,75.0000028610231,10|2,0:0|0:0,0:0:0:0:
156 | 180,336,27545,2,0,L|100:340,1,75.0000028610231,8|0,0:0|3:0,0:0:0:0:
157 | 24,296,28073,2,0,P|12:264|16:212,2,75.0000028610231,8|8|8,0:0|0:0|0:0,0:0:0:0:
158 | 100,248,28866,6,0,P|116:176|88:76,1,150.000005722046,4|2,1:0|0:0,0:0:0:0:
159 | 156,28,29659,1,10,0:0:0:0:
160 | 232,76,29923,2,0,P|272:80|332:60,1,75.0000028610231,2|10,3:2|0:0,0:0:0:0:
161 | 388,32,30452,2,0,P|396:72|384:120,1,75.0000028610231,0|8,0:0|0:0,0:0:0:0:
162 | 480,120,30981,6,0,B|468:164|468:164|476:276,1,150.000005722046,2|2,3:2|0:0,0:0:0:0:
163 | 400,320,31774,1,10,0:0:0:0:
164 | 324,272,32038,2,0,L|328:148,2,112.500004291535,2|2|10,3:2|3:2|0:0,0:0:0:0:
165 | 256,332,33095,6,0,P|184:344|104:308,1,150.000005722046,2|2,3:2|0:0,0:0:0:0:
166 | 48,252,33888,1,10,0:0:0:0:
167 | 104,184,34152,2,0,L|100:80,1,75.0000028610231,2|10,3:2|0:0,0:0:0:0:
168 | 164,44,34681,2,0,L|256:48,1,75.0000028610231,2|10,0:0|0:0,0:0:0:0:
169 | 300,116,35210,6,0,P|380:116|452:64,2,150.000005722046,0|2|0,3:0|0:0|0:0,0:0:0:0:
170 | 236,180,36531,1,0,0:0:0:0:
171 | 320,208,36796,2,0,P|336:244|328:308,1,75.0000028610231,10|2,0:0|3:2,0:0:0:0:
172 | 248,268,37324,6,0,P|196:296|176:376,1,112.500004291535,2|8,3:2|0:1,0:0:0:0:
173 | 52,284,38117,2,0,L|48:172,1,112.500004291535,0|0,3:0|3:0,0:0:0:0:
174 | 152,88,38910,2,0,L|148:180,1,75.0000028610231,8|0,0:1|3:0,0:0:0:0:
175 | 236,136,39439,6,0,L|356:132,1,112.500004291535,0|8,3:0|0:1,0:0:0:0:
176 | 444,36,40232,2,0,L|324:32,1,112.500004291535,0|0,3:0|3:0,0:0:0:0:
177 | 388,156,41025,2,0,L|396:240,1,75.0000028610231,8|0,0:1|3:0,0:0:0:0:
178 | 468,284,41553,6,0,P|420:316|340:296,2,112.500004291535,0|8|0,0:0|0:1|0:0,0:0:0:0:
179 | 395,230,42611,2,0,P|339:227|294:258,2,112.500004291535,0|8|0,3:0|0:1|3:0,0:0:0:0:
180 | 468,284,43668,6,0,P|484:232|448:152,1,112.500004291535,0|8,3:0|0:1,0:0:0:0:
181 | 364,92,44461,2,0,L|240:96,1,112.500004291535,0|0,3:0|3:0,0:0:0:0:
182 | 124,48,45254,2,0,P|128:88|104:136,1,75.0000028610231,8|8,0:1|0:1,0:0:0:0:
183 | 76,140,45650,6,0,L|68:264,1,112.500004291535,4|10,0:1|0:0,0:0:0:0:
184 | 160,252,46311,2,0,L|168:344,1,75.0000028610231,2|10,3:2|0:0,0:0:0:0:
185 | 252,356,46840,2,0,B|264:320|264:320|272:220,1,112.500004291535,2|2,3:2|0:0,0:0:0:0:
186 | 212,176,47501,1,2,3:2:0:0:
187 | 256,100,47765,6,0,P|312:84|388:108,1,112.500004291535,6|2,0:0|0:0,0:0:0:0:
188 | 432,32,48426,2,0,P|452:68|452:120,1,75.0000028610231,2|2,3:2|0:0,0:0:0:0:
189 | 408,176,48954,2,0,L|416:312,1,112.500004291535,4|2,3:1|0:0,0:0:0:0:
190 | 344,344,49615,1,2,3:2:0:0:
191 | 268,292,49879,6,0,L|124:288,1,112.500004291535,4|10,0:0|0:0,0:0:0:0:
192 | 88,352,50540,2,0,P|68:320|64:272,1,75.0000028610231,2|10,3:2|0:0,0:0:0:0:
193 | 112,208,51069,2,0,L|116:116,1,75.0000028610231,2|10,3:2|0:0,0:0:0:0:
194 | 204,156,51597,2,0,L|201:81,1,75.0000028610231,2|10,0:0|3:2,0:0:0:0:
195 | 292,92,52126,6,0,B|280:4,2,75.0000028610231,2|2|2,1:2|1:2|1:2,0:0:0:0:
196 | 380,112,52919,1,2,3:2:0:0:
197 | 380,112,53051,2,0,B|388:148|388:148|380:232,1,112.500004291535,4|0,1:2|0:0,0:0:0:0:
198 | 452,276,53712,1,8,0:0:0:0:
199 | 452,364,53976,1,8,0:0:0:0:
200 | 368,320,54241,6,0,P|288:312|208:348,1,160,4|2,1:0|0:0,0:0:0:0:
201 | 120,328,55034,1,10,0:0:0:0:
202 | 180,256,55298,2,0,P|188:216|180:164,1,80,0|8,0:0|0:0,0:0:0:0:
203 | 112,116,55826,2,0,L|48:108,2,40,2|2|10,0:0|0:0|0:0,0:0:0:0:
204 | 180,48,56355,6,0,L|348:40,1,160,2|2,3:2|3:2,0:0:0:0:
205 | 432,60,57148,1,8,0:0:0:0:
206 | 432,60,57280,2,0,B|416:100|416:100|424:204,1,120,2|8,0:0|0:0,0:0:0:0:
207 | 488,244,57941,2,0,L|500:304,2,40,2|2|10,3:2|3:2|0:0,0:0:0:0:
208 | 396,264,58470,5,2,3:2:0:0:
209 | 304,288,58734,1,10,0:0:0:0:
210 | 248,212,58998,1,2,3:2:0:0:
211 | 152,224,59263,1,10,0:0:0:0:
212 | 208,300,59527,2,0,P|144:316|68:280,2,120,2|2|10,3:2|3:2|0:0,0:0:0:0:
213 | 72,164,60849,6,0,L|75:44,1,120,10|2,0:0|0:0,0:0:0:0:
214 | 112,72,61377,2,0,P|172:76|232:48,1,120,10|2,0:0|0:0,0:0:0:0:
215 | 268,76,61906,2,0,L|356:72,2,80,10|10|10,0:0|0:0|0:0,0:0:0:0:
216 | 232,164,62699,6,0,L|408:168,1,160,4|2,1:0|3:2,0:0:0:0:
217 | 456,240,63492,1,10,0:0:0:0:
218 | 408,320,63756,2,0,P|372:332|320:324,1,80,0|8,3:0|0:0,0:0:0:0:
219 | 260,264,64284,2,0,L|196:256,2,40,2|2|10,3:2|3:2|0:0,0:0:0:0:
220 | 328,196,64813,6,0,P|344:124|316:24,1,160,2|2,3:2|3:2,0:0:0:0:
221 | 232,68,65606,1,10,0:0:0:0:
222 | 232,68,65738,2,0,B|196:52|196:52|96:48,1,120,6|10,0:0|0:0,0:0:0:0:
223 | 36,104,66399,1,2,3:2:0:0:
224 | 20,200,66663,1,10,0:0:0:0:
225 | 92,260,66928,6,0,P|152:248|228:272,1,120,2|2,1:2|1:2,0:0:0:0:
226 | 324,344,67721,2,0,P|404:328|448:256,1,160,2|2,1:2|1:2,0:0:0:0:
227 | 356,100,68778,6,0,P|372:177|348:264,2,160,2|8|8,0:0|0:0|0:0,0:0:0:0:
228 | 268,136,70100,2,0,L|172:128,1,80,0|0,1:0|1:0,0:0:0:0:
229 | 104,88,70628,2,0,P|74:161|83:250,1,160,8|4,0:0|1:0,0:0:0:0:
230 | 152,304,71421,5,8,0:0:0:0:
231 | 244,272,71686,2,0,L|352:276,1,80,0|8,1:0|0:0,0:0:0:0:
232 | 392,340,72214,2,0,P|412:308|412:244,1,80,0|8,1:0|0:0,0:0:0:0:
233 | 496,212,72743,2,0,P|497:174|465:118,1,80,0|8,1:0|0:0,0:0:0:0:
234 | 396,94,73271,6,0,L|236:83,1,160,0|0,1:0|1:0,0:0:0:0:
235 | 156,32,74064,1,8,0:0:0:0:
236 | 96,108,74329,2,0,L|100:188,1,80,0|8,1:0|0:0,0:0:0:0:
237 | 16,232,74857,2,0,P|4:272|8:324,1,80,0|8,1:0|0:0,0:0:0:0:
238 | 96,284,75386,6,0,P|176:272|255:291,1,160,0|0,1:0|1:0,0:0:0:0:
239 | 324,356,76179,1,8,0:0:0:0:
240 | 412,320,76443,2,0,P|444:248|424:152,1,160,0|0,1:0|1:0,0:0:0:0:
241 | 348,120,77236,1,8,0:0:0:0:
242 | 268,176,77500,6,0,L|188:179,1,80,0|8,1:0|0:0,0:0:0:0:
243 | 152,88,78029,2,0,L|72:80,1,80,0|8,1:0|0:0,0:0:0:0:
244 | 48,120,78426,2,0,P|68:172|56:233,1,120,4|8,1:0|0:0,0:0:0:0:
245 | 20,324,79086,2,0,L|104:320,1,80,2|2,0:0|0:0,0:0:0:0:
246 | 184,272,79615,5,4,0:0:0:0:
247 |
--------------------------------------------------------------------------------
/slider/example_data/beatmaps/Sambomaster - Sekai wa Sore wo Ai to Yobunda ze (ZZT the Fifth) [Normal].osu:
--------------------------------------------------------------------------------
1 | osu file format v3
2 |
3 | [General]
4 | AudioFilename: Sekai wa sore wo ai to yobundaze.mp3
5 | AudioHash: 5757fbf61d5d1be7cb92f22dfa2b282f
6 |
7 | [Metadata]
8 | Title:Sekai wa Sore wo Ai to Yobunda ze
9 | Artist:Sambomaster
10 | Creator:ZZT the Fifth
11 | Version:Normal
12 |
13 | [Difficulty]
14 | HPDrainRate:7
15 | CircleSize:5
16 | OverallDifficulty:5
17 | SliderMultiplier: 1.8
18 | SliderTickRate: 2
19 |
20 | [Events]
21 | 2,87604,104163
22 | 2,151410,164377
23 | 2,43442,55991
24 |
25 | [TimingPoints]
26 | 1600,422.554676258993
27 |
28 | [HitObjects]
29 | 128,304,16811,1,0,
30 | 192,304,17023,1,0,
31 | 256,304,17234,1,0,
32 | 368,304,17657,2,0,B|368:304|416:304|448:256|480:240|480:208|480:140,1,176
33 | 432,96,18290,1,0,
34 | 432,96,18502,1,0,
35 | 352,144,18819,1,0,
36 | 256,144,19136,1,0,
37 | 352,304,19981,5,0,
38 | 384,240,20192,1,0,
39 | 320,240,20403,1,0,
40 | 256,240,20614,1,0,
41 | 144,240,21037,2,0,B|144:240|96:240|64:192|32:176|32:144|31:79,1,176
42 | 80,32,21671,1,0,
43 | 192,128,22093,1,0,
44 | 352,280,23572,6,0,B|352:280|336:288|320:304|288:320|256:336|224:320|192:304|176:288|160:272,2,176
45 | 320,224,24629,1,0,
46 | 192,224,25051,1,0,
47 | 344,304,26742,5,0,
48 | 288,344,26953,1,0,
49 | 224,344,27164,1,0,
50 | 176,304,27375,1,0,
51 | 160,144,27798,2,0,B|160:144|172:83|198:48|233:39|272:49|302:59|312:64,1,176
52 | 352,96,28432,2,0,B|352:96|360:112|360:128|360:136|352:176|328:192|306:206|256:226|192:224|178:204|152:192,1,264
53 | 224,152,29277,1,0,
54 | 128,304,30333,5,0,
55 | 192,304,30544,1,0,
56 | 256,304,30756,1,0,
57 | 368,304,31178,2,0,B|368:304|416:304|448:256|480:240|480:208|480:159,1,176
58 | 432,96,31812,1,0,
59 | 352,144,32235,1,0,
60 | 256,144,32657,1,0,
61 | 352,304,33502,5,0,
62 | 384,240,33714,1,0,
63 | 320,240,33925,1,0,
64 | 256,240,34136,1,0,
65 | 144,240,34559,2,0,B|144:240|96:240|64:192|32:176|32:144|31:81,1,176
66 | 80,32,35193,1,0,
67 | 192,128,35615,1,0,
68 | 352,296,37094,6,0,B|352:296|336:304|320:320|288:336|256:352|224:336|192:320|176:304|160:288,1,176
69 | 224,256,37728,1,0,
70 | 288,256,37939,1,0,
71 | 256,203,38150,1,0,
72 | 256,32,38573,1,0,
73 | 352,320,40475,6,4,B|352:320|317:336|256:336|192:336|160:320,1,176
74 | 144,256,41108,1,4,
75 | 216,256,41320,1,0,
76 | 296,256,41531,1,0,
77 | 368,256,41742,1,4,
78 | 432,160,42165,2,4,B|432:160|408:104|384:80|328:40|280:16|280:16,1,176
79 | 224,40,42799,2,4,B|224:40|233:36|185:60|129:100|105:124|81:180,1,176
80 | 96,224,57165,5,4,
81 | 32,160,57377,2,4,B|32:160|48:112|80:80|128:48|184:24,1,176
82 | 192,192,58222,1,6,
83 | 256,192,58433,1,6,
84 | 320,192,58644,1,6,
85 | 480,160,59067,2,4,B|480:160|464:112|432:80|384:48|328:24,1,176
86 | 256,32,59701,1,4,
87 | 96,224,60546,5,4,
88 | 32,160,60757,2,4,B|32:160|48:112|80:80|128:48|184:24,1,176
89 | 192,192,61602,1,2,
90 | 256,192,61814,1,2,
91 | 320,192,62025,1,6,
92 | 480,160,62447,2,4,B|480:160|464:112|432:80|384:48|328:24,1,176
93 | 256,32,63081,1,4,
94 | 224,160,63504,6,0,B|224:160|192:160|128:128,1,88
95 | 80,96,63926,1,4,
96 | 54,258,64349,2,4,B|54:258|92:256|144:288,1,88
97 | 200,304,64771,1,4,
98 | 288,160,65194,2,4,B|288:160|320:160|384:128,1,88
99 | 432,104,65617,1,4,
100 | 457,258,66039,2,4,B|457:258|418:259|367:288,1,88
101 | 304,304,66462,1,4,
102 | 48,136,67518,6,4,B|48:136|32:192|32:304|40:328,1,176
103 | 192,352,68363,1,4,
104 | 256,352,68574,1,4,
105 | 320,352,68786,1,4,
106 | 376,304,68997,2,6,B|376:304|368:264|328:184|304:176|264:168|248:168|224:176|192:192|168:208|160:216,1,264
107 | 120,168,69842,2,6,B|120:168|168:136|256:104|300:110|392:152,1,264
108 | 480,160,70898,6,6,B|480:160|464:112|432:80|384:48|328:24,1,176
109 | 320,192,71744,1,2,
110 | 256,192,71955,1,2,
111 | 192,192,72166,1,2,
112 | 32,160,72589,2,6,B|32:160|48:112|80:80|128:48|192:16,1,176
113 | 256,32,73223,1,6,
114 | 480,160,74279,6,6,B|480:160|464:112|432:80|384:48|320:16,1,176
115 | 320,192,75124,1,2,
116 | 256,192,75335,1,2,
117 | 192,192,75547,1,2,
118 | 32,160,75969,2,6,B|32:160|48:112|80:80|128:48|192:16,1,176
119 | 256,32,76603,1,6,
120 | 288,160,77026,6,4,B|288:160|320:160|384:128,1,88
121 | 432,96,77448,1,4,
122 | 457,258,77871,2,4,B|457:258|405:264|367:288,1,88
123 | 312,304,78293,1,4,
124 | 224,160,78716,2,4,B|224:160|192:160|128:128,1,88
125 | 80,104,79138,1,4,
126 | 54,258,79561,2,4,B|54:258|100:261|144:288,1,88
127 | 208,304,79983,1,4,
128 | 432,264,81040,6,4,B|432:264|416:280|366:308|295:330,2,132
129 | 256,192,82096,1,4,
130 | 256,24,82519,1,4,
131 | 328,192,82941,2,6,B|328:192|328:200|328:208|328:224|320:240|312:248|296:264|272:272|248:272|216:272|192:264|176:248|168:216|168:176|192:144|200:128|224:120|264:120|292:120|313:144,1,352
132 | 256,192,84420,12,0,87378
133 | 168,224,105337,1,0,
134 | 168,224,105548,1,4,
135 | 168,224,105759,1,4,
136 | 32,216,106182,2,0,B|32:216|32:240|40:272|48:304|64:336|88:352|136:360|152:360,2,176
137 | 104,144,107449,1,0,
138 | 104,144,107661,1,4,
139 | 344,224,108717,5,0,
140 | 344,224,108928,1,4,
141 | 344,224,109140,1,4,
142 | 480,216,109562,2,0,B|480:216|480:240|472:272|464:304|448:336|424:352|376:360|360:360,2,176
143 | 376,296,110830,1,0,
144 | 376,296,111041,1,4,
145 | 168,160,112098,5,0,
146 | 168,160,112309,1,4,
147 | 168,160,112520,1,4,
148 | 32,168,112943,2,0,B|32:168|32:144|40:112|48:80|64:48|88:32|136:24|152:24,2,176
149 | 104,240,114210,1,0,
150 | 104,240,114422,1,4,
151 | 376,160,115478,5,0,
152 | 376,160,115689,1,4,
153 | 376,160,115901,1,4,
154 | 376,25,116323,2,0,B|376:25|376:24|424:32|448:48|464:80|472:112|480:144|480:168,1,180
155 | 376,240,117168,1,0,
156 | 312,224,117379,1,4,
157 | 256,192,117591,1,4,
158 | 96,224,118013,5,4,
159 | 32,160,118225,2,4,B|32:160|48:112|80:80|128:48|184:24,3,180
160 | 144,192,119915,1,4,
161 | 216,192,120126,1,4,
162 | 296,192,120337,1,4,
163 | 368,192,120549,1,4,
164 | 256,192,121605,12,0,123929
165 | 80,96,124774,1,4,
166 | 50,252,125197,2,4,B|50:252|100:260|142:282,1,90
167 | 200,304,125619,1,4,
168 | 288,160,126042,2,4,B|288:160|320:160|384:128,1,90
169 | 432,104,126464,1,4,
170 | 457,258,126887,2,4,B|457:258|411:260|367:288,1,90
171 | 304,304,127310,1,4,
172 | 48,136,128366,6,4,B|48:136|32:192|32:304|40:328,1,180
173 | 192,352,129211,1,4,
174 | 256,352,129422,1,4,
175 | 320,352,129634,1,4,
176 | 376,304,129845,2,6,B|376:304|368:264|328:184|304:176|264:168|248:168|224:176|192:192|168:208|160:216,1,270
177 | 120,168,130690,2,6,B|120:168|168:136|256:104|280:112|392:152,1,270
178 | 480,160,131746,6,6,B|480:160|464:112|432:80|384:48|328:24,3,180
179 | 368,192,133437,1,6,
180 | 296,192,133648,1,4,
181 | 216,192,133859,1,4,
182 | 144,192,134070,1,6,
183 | 32,224,135127,6,6,B|32:224|48:272|80:304|128:336|184:360,3,180
184 | 144,192,136817,1,6,
185 | 216,192,137028,1,4,
186 | 296,192,137240,1,4,
187 | 368,192,137451,1,6,
188 | 256,192,137873,12,0,140831
189 | 432,264,141888,6,6,B|432:264|416:280|320:320|296:320,2,135
190 | 256,192,142944,1,4,
191 | 256,24,143367,1,4,
192 | 328,192,143789,2,6,B|328:192|328:200|328:208|328:224|320:240|312:248|296:264|272:272|248:272|216:272|192:264|176:248|168:216|168:176|192:144|200:128|224:120|264:120|280:120|296:136,1,360
193 | 80,264,145268,6,6,B|80:264|96:280|192:320|216:320,2,135
194 | 256,192,146324,1,4,
195 | 256,192,146536,1,4,
196 | 192,192,146748,2,0,B|192:192|192:208|208:240|224:256|240:264|272:264|296:264|320:240|328:208|328:176|320:152|280:128,1,264
197 | 256,192,147803,12,0,151606
198 | 288,64,165551,1,4,
199 | 336,112,165762,1,4,
200 | 384,160,165973,1,4,
201 | 384,224,166185,1,4,
202 | 224,320,166818,1,4,
203 | 176,272,167030,1,4,
204 | 128,224,167241,1,4,
205 | 128,160,167452,1,4,
206 | 256,160,168086,5,2,
207 | 288,224,168297,1,0,
208 | 224,224,168509,1,2,
209 | 224,64,168931,5,4,
210 | 176,112,169142,1,4,
211 | 128,160,169354,1,4,
212 | 128,224,169565,1,4,
213 | 288,320,170199,1,4,
214 | 336,272,170410,1,4,
215 | 384,224,170621,1,4,
216 | 384,160,170833,1,4,
217 | 256,160,171466,5,2,
218 | 224,224,171678,1,0,
219 | 288,224,171889,1,2,
220 | 256,192,172312,12,0,174213
221 | 224,64,175481,1,0,
222 | 288,64,175692,1,4,
223 | 336,112,175903,1,4,
224 | 384,160,176115,1,4,
225 | 384,224,176326,1,4,
226 | 336,272,176537,1,4,
227 | 288,320,176748,1,4,
228 | 224,320,176960,1,4,
229 | 176,272,177171,1,4,
230 | 128,224,177382,1,4,
231 | 128,160,177594,1,4,
232 | 176,112,177805,1,4,
233 | 224,64,178016,1,4,
234 | 416,224,178861,5,4,
235 | 448,160,179072,2,4,B|448:160|432:112|400:80|352:48|296:24,2,180
236 | 384,160,180129,1,0,
237 | 320,160,180340,1,0,
238 | 288,224,180551,1,0,
239 | 224,224,180763,1,0,
240 | 256,160,180974,1,0,
241 | 256,96,181185,1,0,
242 | 256,32,181397,1,4,
243 | 96,224,182242,5,4,
244 | 64,160,182453,2,4,B|64:160|80:112|112:80|160:48|216:24,2,180
245 | 128,160,183509,1,0,
246 | 192,160,183721,1,0,
247 | 224,224,183932,1,0,
248 | 288,224,184143,1,0,
249 | 256,160,184354,1,0,
250 | 256,96,184566,1,0,
251 | 256,32,184777,1,4,
252 | 336,160,185200,5,0,
253 | 392,120,185411,1,0,
254 | 456,88,185622,1,4,
255 | 456,296,186045,1,0,
256 | 400,264,186256,1,0,
257 | 336,296,186467,1,4,
258 | 176,160,186890,1,0,
259 | 120,120,187101,1,0,
260 | 56,88,187312,1,4,
261 | 56,296,187735,1,0,
262 | 112,264,187946,1,0,
263 | 176,296,188157,1,4,
264 | 352,304,189214,6,4,B|352:304|336:312|320:328|288:344|256:360|224:344|192:328|176:312|160:296,2,180
265 | 320,248,190270,1,0,
266 | 256,272,190481,1,0,
267 | 192,248,190693,1,4,
268 | 320,152,191115,1,0,
269 | 256,152,191327,1,0,
270 | 192,152,191538,1,4,
271 | 256,56,191960,1,0,
272 | 256,56,192172,1,4,
273 | 64,160,192594,6,6,B|64:160|80:112|112:80|160:48|216:24,2,180
274 | 128,160,193651,1,0,
275 | 192,160,193862,1,2,
276 | 224,224,194073,1,0,
277 | 288,224,194284,1,2,
278 | 256,160,194496,1,2,
279 | 256,96,194707,1,2,
280 | 256,32,194918,1,6,
281 | 448,160,195975,6,6,B|448:160|432:112|400:80|352:48|296:24,2,180
282 | 384,160,197032,1,0,
283 | 320,160,197242,1,2,
284 | 288,224,197454,1,0,
285 | 224,224,197665,1,2,
286 | 256,160,197876,1,2,
287 | 256,96,198087,1,0,
288 | 256,32,198299,1,4,
289 | 176,160,198721,5,0,
290 | 120,120,198933,1,0,
291 | 56,88,199144,1,6,
292 | 56,296,199566,1,0,
293 | 112,264,199778,1,0,
294 | 176,296,199989,1,6,
295 | 336,160,200411,1,0,
296 | 392,120,200623,1,0,
297 | 456,88,200834,1,6,
298 | 456,296,201257,1,0,
299 | 400,264,201468,1,0,
300 | 336,296,201679,1,6,
301 | 80,264,202736,6,4,B|80:264|96:280|192:320|216:320,2,135
302 | 256,192,203792,1,4,
303 | 256,24,204214,1,4,
304 | 384,128,204637,5,4,
305 | 320,160,204848,1,0,
306 | 256,128,205060,1,4,
307 | 192,160,205271,1,0,
308 | 128,128,205482,1,4,
309 | 336,304,206116,6,0,B|336:304|288:320|256:320|224:320|176:304,2,135
310 | 336,160,207172,1,0,
311 | 336,160,207384,1,0,
312 | 368,96,207595,2,4,B|368:96|408:113|456:145|488:177|504:225,2,180
313 | 224,160,208862,1,0,
314 | 224,160,209073,1,4,
315 | 432,264,209497,6,4,B|432:264|416:280|320:320|296:320,2,135
316 | 256,192,210554,1,4,
317 | 256,24,210976,1,4,
318 | 128,128,211398,5,4,
319 | 192,160,211609,1,0,
320 | 256,128,211820,1,4,
321 | 320,160,212032,1,0,
322 | 384,128,212243,1,4,
323 | 256,192,212877,12,0,215835
324 |
--------------------------------------------------------------------------------
/slider/example_data/beatmaps/__init__.py:
--------------------------------------------------------------------------------
1 | from pathlib import Path
2 |
3 | from slider import Beatmap
4 |
5 |
6 | def example_beatmap(name):
7 | """Load one of the example beatmaps.
8 |
9 | Parameters
10 | ----------
11 | name : str
12 | The name of the example file to open.
13 | """
14 | return Beatmap.from_path(Path(__file__).parent / name)
15 |
16 |
17 | _sendan_life_versions = frozenset(
18 | {
19 | "Easy",
20 | "Normal",
21 | "Little's Hard",
22 | "Little's Insane",
23 | "Extra",
24 | "Crystal's Garakowa",
25 | }
26 | )
27 |
28 |
29 | def sendan_life(version="Crystal's Garakowa"):
30 | """Load a version of the Sendan Life beatmap.
31 |
32 | Parameters
33 | ----------
34 | version : str
35 | The version to load.
36 |
37 | Returns
38 | -------
39 | sendan_life : Beatmap
40 | The beatmap object.
41 | """
42 | if version not in _sendan_life_versions:
43 | raise ValueError(
44 | f"unknown version {version}, options: {set(_sendan_life_versions)}"
45 | )
46 |
47 | return example_beatmap(
48 | f"Remo Prototype[CV Hanamori Yumiri] - Sendan Life (Narcissu)"
49 | f" [{version}].osu"
50 | )
51 |
52 |
53 | _ai_no_scenario_versions = frozenset(
54 | {
55 | "Beginner",
56 | "Extra",
57 | "Hard",
58 | "ktgster's Insane",
59 | "Kyshiro's Extra",
60 | "Nathan's Insane",
61 | "Normal",
62 | "pishi's Extra",
63 | "Sharkie's Insane",
64 | "sheela's Very Hard",
65 | "Smoothie World's Extra",
66 | "Super Beginner",
67 | "Tatoe",
68 | "toybot's Insane",
69 | "Ultra Beginner",
70 | "Walao's Advanced",
71 | "Yuistrata's Easy",
72 | }
73 | )
74 |
75 |
76 | def miiro_vs_ai_no_scenario(version="Tatoe"):
77 | """Load a version of the MIIRO vs. Ai no Scenario beatmap.
78 |
79 | Parameters
80 | ----------
81 | version : str
82 | The version to load.
83 |
84 | Returns
85 | -------
86 | sendan_life : Beatmap
87 | The beatmap object.
88 | """
89 | if version not in _ai_no_scenario_versions:
90 | raise ValueError(
91 | f"unknown version {version}, options:" f" {set(_ai_no_scenario_versions)}"
92 | )
93 |
94 | return example_beatmap(
95 | f"AKINO from bless4 & CHiCO with HoneyWorks - MIIRO vs. Ai no Scenario"
96 | f" (monstrata) [{version}].osu"
97 | )
98 |
--------------------------------------------------------------------------------
/slider/example_data/collections/__init__.py:
--------------------------------------------------------------------------------
1 | from pathlib import Path
2 |
3 | from slider import CollectionDB
4 |
5 |
6 | def example_collection(name):
7 | """Load one of the example collection dbs.
8 |
9 | Parameters
10 | ----------
11 | name : str
12 | The name of the example file to open.
13 | """
14 | return CollectionDB.from_path(Path(__file__).parent / name)
15 |
16 |
17 | def test_db():
18 | """Load the testing collection db.
19 |
20 | Returns
21 | -------
22 | test_db : CollectionDB
23 | The collection db object.
24 | """
25 | return example_collection("test.db")
26 |
--------------------------------------------------------------------------------
/slider/example_data/collections/test.db:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/llllllllll/slider/2f4437ac002e7eb6e2d0ae6dfc2da04e9fb82075/slider/example_data/collections/test.db
--------------------------------------------------------------------------------
/slider/game_mode.py:
--------------------------------------------------------------------------------
1 | from enum import IntEnum, unique
2 |
3 |
4 | @unique
5 | class GameMode(IntEnum):
6 | """The various game modes in osu!."""
7 |
8 | standard = 0
9 | taiko = 1
10 | ctb = 2
11 | mania = 3
12 |
--------------------------------------------------------------------------------
/slider/library.py:
--------------------------------------------------------------------------------
1 | from functools import lru_cache
2 | from hashlib import md5
3 | import os
4 | import pathlib
5 | import sqlite3
6 | import sys
7 | import logging
8 |
9 | import requests
10 |
11 | from .beatmap import Beatmap
12 | from .cli import maybe_show_progress
13 |
14 |
15 | if sys.platform.startswith("win"):
16 |
17 | def sanitize_filename(name):
18 | for invalid_character in r':*?"\/|<>':
19 | name = name.replace(invalid_character, "")
20 | return name
21 |
22 | else:
23 |
24 | def sanitize_filename(name):
25 | return name.replace("/", "")
26 |
27 |
28 | sanitize_filename.__doc__ = """\
29 | Sanitize a filename so that it is safe to write to the filesystem.
30 |
31 | Parameters
32 | ----------
33 | name : str
34 | The name of the file without the directory.
35 |
36 | Returns
37 | -------
38 | sanitized_name : str
39 | The name with invalid characters stripped out.
40 | """
41 |
42 |
43 | class Library:
44 | """A library of beatmaps backed by a local directory.
45 |
46 | Parameters
47 | ----------
48 | path : path-like
49 | The path to a local library directory.
50 | cache : int, optional
51 | The amount of beatmaps to cache in memory. This uses
52 | :func:`functools.lru_cache`, and if set to None will cache everything.
53 | download_url : str, optional
54 | The default location to download beatmaps from.
55 | """
56 |
57 | DEFAULT_DOWNLOAD_URL = "https://osu.ppy.sh/osu"
58 | DEFAULT_CACHE_SIZE = 2048
59 |
60 | def __init__(
61 | self, path, *, cache=DEFAULT_CACHE_SIZE, download_url=DEFAULT_DOWNLOAD_URL
62 | ):
63 | self.path = path = pathlib.Path(path)
64 |
65 | self._cache_size = cache
66 | self._read_beatmap = lru_cache(cache)(self._raw_read_beatmap)
67 | self._db = db = sqlite3.connect(str(path / ".slider.db"))
68 | with db:
69 | db.execute(
70 | """\
71 | CREATE TABLE IF NOT EXISTS beatmaps (
72 | md5 BLOB PRIMARY KEY,
73 | id INT,
74 | path TEXT UNIQUE NOT NULL
75 | )
76 | """,
77 | )
78 | self._download_url = download_url
79 |
80 | def copy(self):
81 | """Create a copy suitable for use in a new thread.
82 |
83 | Returns
84 | -------
85 | Library
86 | The new copy.
87 | """
88 | return type(self)(
89 | self.path,
90 | cache=self._cache_size,
91 | download_url=self._download_url,
92 | )
93 |
94 | def close(self):
95 | """Close any resources used by this library."""
96 | self._read_beatmap.cache_clear()
97 | self._db.close()
98 |
99 | def __enter__(self):
100 | return self
101 |
102 | def __exit__(self, *exc_info):
103 | self.close()
104 |
105 | @staticmethod
106 | def _osu_files(path, recurse):
107 | """An iterator of ``.osu`` filepaths in a directory.
108 |
109 | Parameters
110 | ----------
111 | path : path-like
112 | The directory to search in.
113 | recurse : bool
114 | Recursively search ``path``?
115 |
116 | Yields
117 | ------
118 | path : str
119 | The path to a ``.osu`` file.
120 | """
121 | if recurse:
122 | for directory, _, filenames in os.walk(path):
123 | for filename in filenames:
124 | if filename.endswith(".osu"):
125 | yield pathlib.Path(os.path.join(directory, filename))
126 | else:
127 | for entry in os.scandir(directory):
128 | path = entry.path
129 | if path.endswith(".osu"):
130 | yield pathlib.Path(path)
131 |
132 | @classmethod
133 | def create_db(
134 | cls,
135 | path,
136 | *,
137 | recurse=True,
138 | cache=DEFAULT_CACHE_SIZE,
139 | download_url=DEFAULT_DOWNLOAD_URL,
140 | show_progress=False,
141 | skip_exceptions=False,
142 | ):
143 | """Create a Library from a directory of ``.osu`` files.
144 |
145 | Parameters
146 | ----------
147 | path : path-like
148 | The path to the directory to read.
149 | recurse : bool, optional
150 | Recursively search for beatmaps?
151 | cache : int, optional
152 | The amount of beatmaps to cache in memory. This uses
153 | :func:`functools.lru_cache`, and if set to None will cache
154 | everything.
155 | download_url : str, optional
156 | The default location to download beatmaps from.
157 | show_progress : bool, optional
158 | Display a progress bar?
159 |
160 | Notes
161 | -----
162 | Moving the underlying ``.osu`` files invalidates the library. If this
163 | happens, just re-run ``create_db`` again.
164 | """
165 | path = pathlib.Path(path)
166 | db_path = path / ".slider.db"
167 | try:
168 | # ensure the db is cleared
169 | os.remove(db_path)
170 | except FileNotFoundError:
171 | pass
172 |
173 | self = cls(path, cache=cache, download_url=download_url)
174 | write_to_db = self._write_to_db
175 |
176 | progress = maybe_show_progress(
177 | self._osu_files(path, recurse=recurse),
178 | show_progress,
179 | label="Processing beatmaps: ",
180 | item_show_func=lambda p: "Done!" if p is None else str(p.stem),
181 | )
182 | with self._db, progress as it:
183 | for path in it:
184 | with open(path, "rb") as f:
185 | data = f.read()
186 |
187 | try:
188 | beatmap = Beatmap.parse(data.decode("utf-8-sig"))
189 | except Exception as e:
190 | if skip_exceptions:
191 | logging.exception(f'Failed to parse "{path}"')
192 | continue
193 | raise ValueError(
194 | f'Failed to parse "{path}". '
195 | "Use --skip-exceptions to skip this file and continue."
196 | ) from e
197 |
198 | write_to_db(beatmap, data, path)
199 |
200 | return self
201 |
202 | def beatmap_cached(self, *, beatmap_id=None, beatmap_md5=None):
203 | """Whether we have the given beatmap cached.
204 |
205 | Parameters
206 | ----------
207 | beatmap_id : int
208 | The id of the beatmap to look for.
209 | beatmap_md5 : str
210 | The md5 hash of the beatmap to look for.
211 |
212 | Returns
213 | -------
214 | bool
215 | Whether we have the given beatmap cached.
216 | """
217 | with self._db:
218 | if beatmap_id is not None:
219 | path_query = self._db.execute(
220 | "SELECT 1 FROM beatmaps WHERE id = ? LIMIT 1",
221 | (beatmap_id,),
222 | )
223 | else:
224 | path_query = self._db.execute(
225 | "SELECT 1 FROM beatmaps WHERE md5 = ? LIMIT 1",
226 | (beatmap_md5,),
227 | )
228 |
229 | path = path_query.fetchone()
230 | return bool(path)
231 |
232 | @staticmethod
233 | def _raw_read_beatmap(self, *, beatmap_id=None, beatmap_md5=None):
234 | """Function for opening beatmaps from disk.
235 |
236 | This handles both cases to only require a single lru cache.
237 |
238 | Notes
239 | -----
240 | This is a ``staticmethod`` to avoid a cycle from self to the lru_cache
241 | back to self.
242 | """
243 | with self._db:
244 | if beatmap_id is not None:
245 | key = beatmap_id
246 | path_query = self._db.execute(
247 | "SELECT path FROM beatmaps WHERE id = ?",
248 | (beatmap_id,),
249 | )
250 | else:
251 | key = beatmap_md5
252 | path_query = self._db.execute(
253 | "SELECT path FROM beatmaps WHERE md5 = ?",
254 | (beatmap_md5,),
255 | )
256 |
257 | path = path_query.fetchone()
258 | if path is None:
259 | raise KeyError(key)
260 |
261 | (path,) = path
262 | # Make path relative to the root path. We save paths relative to
263 | # ``self.path`` so a library can be relocated without requiring a
264 | # rebuild
265 | return Beatmap.from_path(self.path / path)
266 |
267 | def lookup_by_id(self, beatmap_id, *, download=False, save=False):
268 | """Retrieve a beatmap by its beatmap id.
269 |
270 | Parameters
271 | ----------
272 | beatmap_id : int or str
273 | The id of the beatmap to lookup.
274 |
275 | Returns
276 | -------
277 | beatmap : Beatmap
278 | The beatmap with the given id.
279 | download : bool. optional
280 | Download the map if it doesn't exist.
281 | save : bool, optional
282 | If the lookup falls back to a download, should the result be saved?
283 |
284 | Raises
285 | ------
286 | KeyError
287 | Raised when the given id is not in the library.
288 | """
289 | try:
290 | return self._read_beatmap(self, beatmap_id=beatmap_id)
291 | except KeyError:
292 | if not download:
293 | raise
294 | return self.download(beatmap_id, save=save)
295 |
296 | def lookup_by_md5(self, beatmap_md5):
297 | """Retrieve a beatmap by its md5 hash.
298 |
299 | Parameters
300 | ----------
301 | beatmap_md5 : bytes
302 | The md5 hash of the beatmap to lookup.
303 |
304 | Returns
305 | -------
306 | beatmap : Beatmap
307 | The beatmap with the given md5 hash.
308 |
309 | Raises
310 | ------
311 | KeyError
312 | Raised when the given md5 hash is not in the library.
313 | """
314 | return self._read_beatmap(self, beatmap_md5=beatmap_md5)
315 |
316 | def beatmap_from_path(self, path, copy=False):
317 | """Returns a beatmap from a file on disk.
318 |
319 | Parameters
320 | ----------
321 | path : str or pathlib.Path
322 | The path to the file to create the beatmap from.
323 | copy : bool
324 | Should the file be copied to the library's beatmap directory?
325 |
326 | Returns
327 | -------
328 | beatmap : Beatmap
329 | The beatmap represented by the given file.
330 | """
331 | data_bytes = open(path, "rb").read()
332 | data = data_bytes.decode("utf-8-sig")
333 | beatmap = Beatmap.parse(data)
334 |
335 | if copy:
336 | self.save(data_bytes, beatmap=beatmap)
337 |
338 | return beatmap
339 |
340 | def save(self, data, *, beatmap=None):
341 | """Save raw data for a beatmap at a given location.
342 |
343 | Parameters
344 | ----------
345 | data : bytes
346 | The unparsed beatmap data.
347 | beatmap : Beatmap, optional
348 | The parsed beatmap. If not provided, the raw data will be parsed.
349 |
350 | Returns
351 | -------
352 | beatmap : Beatmap
353 | The parsed beatmap.
354 | """
355 | if beatmap is None:
356 | beatmap = Beatmap.parse(data.decode("utf-8-sig"))
357 |
358 | path = self.path / sanitize_filename(
359 | f"{beatmap.artist} - "
360 | f"{beatmap.title} "
361 | f"({beatmap.creator})"
362 | f"[{beatmap.version}]"
363 | f".osu"
364 | )
365 | with open(path, "wb") as f:
366 | f.write(data)
367 |
368 | with self._db:
369 | self._write_to_db(beatmap, data, path)
370 | return beatmap
371 |
372 | def delete(self, beatmap, *, remove_file=True):
373 | """Remove a beatmap from the library.
374 |
375 | Parameters
376 | ----------
377 | beatmap : Beatmap
378 | The beatmap to delete.
379 | remove_file : bool, optional
380 | Remove the .osu file from disk.
381 | """
382 | with self._db:
383 | if remove_file:
384 | paths = self._db.execute(
385 | "SELECT path FROM beatmaps WHERE id = ?",
386 | (beatmap.beatmap_id,),
387 | )
388 | for (path,) in paths:
389 | os.unlink(path)
390 |
391 | self._db.execute(
392 | "DELETE FROM beatmaps WHERE id = ?",
393 | (beatmap.beatmap_id,),
394 | )
395 |
396 | def _write_to_db(self, beatmap, data, path):
397 | """Write data to the database.
398 |
399 | Parameters
400 | ----------
401 | beatmap : Beatmap
402 | The beatmap being stored.
403 | data : bytes
404 | The raw data for the beatmap
405 | path : str
406 | The path to save
407 | """
408 | # save paths relative to ``self.path`` so a library can be relocated
409 | # without requiring a rebuild
410 | path = path.relative_to(self.path)
411 | beatmap_md5 = md5(data).hexdigest()
412 | beatmap_id = beatmap.beatmap_id
413 |
414 | try:
415 | self._db.execute(
416 | "INSERT INTO beatmaps VALUES (?,?,?)",
417 | (beatmap_md5, beatmap_id, str(path)),
418 | )
419 | except sqlite3.IntegrityError:
420 | # ignore duplicate beatmaps
421 | pass
422 |
423 | def download(self, beatmap_id, *, save=False):
424 | """Download a beatmap.
425 |
426 | Parameters
427 | ----------
428 | beatmap_id : int or str
429 | The id of the beatmap to download.
430 | save : bool, optional
431 | Save the beatmap to disk?
432 |
433 | Returns
434 | -------
435 | beatmap : Beatmap
436 | The downloaded beatmap.
437 | """
438 | beatmap_response = requests.get(f"{self._download_url}/{beatmap_id}")
439 | beatmap_response.raise_for_status()
440 |
441 | data = beatmap_response.content
442 | beatmap = Beatmap.parse(data.decode("utf-8-sig"))
443 |
444 | if save:
445 | self.save(data, beatmap=beatmap)
446 |
447 | return beatmap
448 |
449 | @property
450 | def md5s(self):
451 | """All of the beatmap hashes that this has downloaded."""
452 | return tuple(md5 for md5, in self._db.execute("SELECT md5 FROM beatmaps"))
453 |
454 | @property
455 | def ids(self):
456 | """All of the beatmap ids that this has downloaded."""
457 | return tuple(
458 | int(id_)
459 | for id_, in self._db.execute("SELECT id FROM beatmaps")
460 | if id_ is not None
461 | )
462 |
--------------------------------------------------------------------------------
/slider/mod.py:
--------------------------------------------------------------------------------
1 | from collections import namedtuple
2 |
3 | from .bit_enum import BitEnum
4 |
5 |
6 | class Mod(BitEnum):
7 | """The mods in osu!"""
8 |
9 | no_fail = 1
10 | easy = 1 << 1
11 | no_video = 1 << 2 # not a mod anymore
12 | hidden = 1 << 3
13 | hard_rock = 1 << 4
14 | sudden_death = 1 << 5
15 | double_time = 1 << 6
16 | relax = 1 << 7
17 | half_time = 1 << 8
18 | nightcore = 1 << 9 # always used with double_time
19 | flashlight = 1 << 10
20 | autoplay = 1 << 11
21 | spun_out = 1 << 12
22 | relax2 = 1 << 13 # same as autopilot
23 | auto_pilot = 1 << 13 # same as relax2
24 | perfect = 1 << 14
25 | key4 = 1 << 15
26 | key5 = 1 << 16
27 | key6 = 1 << 17
28 | key7 = 1 << 18
29 | key8 = 1 << 19
30 | fade_in = 1 << 20
31 | random = 1 << 21
32 | last_mod = 1 << 22 # same as cinema
33 | cinema = 1 << 22 # same as last_mod
34 | target_practice = 1 << 23
35 | key9 = 1 << 24
36 | coop = 1 << 25
37 | key1 = 1 << 26
38 | key3 = 1 << 27
39 | key2 = 1 << 28
40 | scoreV2 = 1 << 29
41 |
42 | @classmethod
43 | def parse(cls, cs):
44 | """Parse a mod mask out of a list of shortened mod names.
45 |
46 | Parameters
47 | ----------
48 | cs : str
49 | The mod string.
50 |
51 | Returns
52 | -------
53 | mod_mask : int
54 | The mod mask.
55 | """
56 | if len(cs) % 2 != 0:
57 | raise ValueError(f"malformed mods: {cs!r}")
58 |
59 | cs = cs.lower()
60 | mapping = {
61 | "ez": cls.easy,
62 | "hr": cls.hard_rock,
63 | "ht": cls.half_time,
64 | "dt": cls.double_time,
65 | "hd": cls.hidden,
66 | "fl": cls.flashlight,
67 | "so": cls.spun_out,
68 | "nf": cls.no_fail,
69 | }
70 |
71 | mod = 0
72 | for n in range(0, len(cs), 2):
73 | try:
74 | mod |= mapping[cs[n : n + 2]]
75 | except KeyError:
76 | raise ValueError(f"unknown mod: {cs[n:n + 2]!r}")
77 |
78 | return mod
79 |
80 |
81 | def ar_to_ms(ar):
82 | """Convert an approach rate value to milliseconds of time that an element
83 | appears on the screen before being hit.
84 |
85 | Parameters
86 | ----------
87 | ar : float
88 | The approach rate.
89 |
90 | Returns
91 | -------
92 | milliseconds : float
93 | The number of milliseconds that an element appears on the screen before
94 | being hit at the given approach rate.
95 |
96 | See Also
97 | --------
98 | :func:`slider.mod.ms_to_ar`
99 | """
100 | # NOTE: The formula for ar_to_ms is different for ar >= 5 and ar < 5
101 | # see: https://osu.ppy.sh/wiki/Song_Setup#Approach_Rate
102 | if ar >= 5:
103 | return 1950 - (ar * 150)
104 | else:
105 | return 1800 - (ar * 120)
106 |
107 |
108 | def ms_to_ar(ms):
109 | """Convert milliseconds to hit an element into an approach rate value.
110 |
111 | Parameters
112 | ----------
113 | ms : float
114 | The number of milliseconds that an element appears on the screen before
115 | being hit.
116 |
117 | Returns
118 | -------
119 | ar : float
120 | The approach rate value that produces the given millisecond value.
121 |
122 | See Also
123 | --------
124 | :func:`slider.mod.ar_to_ms`
125 | """
126 | # NOTE: The formula for ar_to_ms is different for ar >= 5 and ar < 5
127 | # see: https://osu.ppy.sh/wiki/Song_Setup#Approach_Rate
128 | ar = (ms - 1950) / -150
129 | if ar < 5:
130 | # the ar lines cross at 5 but we use a different formula for the slower
131 | # approach rates.
132 | return (ms - 1800) / -120
133 | return ar
134 |
135 |
136 | def circle_radius(cs):
137 | """Compute the ``CS`` attribute into a circle radius in osu! pixels.
138 |
139 | Parameters
140 | ----------
141 | cs : float
142 | The circle size.
143 |
144 | Returns
145 | -------
146 | radius : float
147 | The radius in osu! pixels.
148 | """
149 | return (512 / 16) * (1 - 0.7 * (cs - 5) / 5)
150 |
151 |
152 | class HitWindows(namedtuple("HitWindows", "hit_300, hit_100, hit_50")):
153 | """Times to hit an object at various accuracies
154 |
155 | Parameters
156 | ----------
157 | hit_300 : int
158 | The maxumium number of milliseconds away from exactly on time a hit
159 | can be to still be a 300
160 | hit_100 : int
161 | The maxumium number of milliseconds away from exactly on time a hit
162 | can be to still be a 100
163 | hit_50 : int
164 | The maxumium number of milliseconds away from exactly on time a hit
165 | can be to still be a 50
166 |
167 | Notes
168 | -----
169 | A hit further than the ``hit_50`` value away from the time of a hit object
170 | is a miss.
171 | """
172 |
173 |
174 | def od_to_ms(od):
175 | """Convert an overall difficulty value into milliseconds to hit an object at
176 | various accuracies.
177 |
178 | Parameters
179 | ----------
180 | od : float
181 | The overall difficulty.
182 |
183 | Returns
184 | -------
185 | hw : HitWindows
186 | A namedtuple of numbers of milliseconds to hit an object at different
187 | accuracies.
188 | """
189 | return HitWindows(
190 | hit_300=(159 - 12 * od) / 2,
191 | hit_100=(279 - 16 * od) / 2,
192 | hit_50=(399 - 20 * od) / 2,
193 | )
194 |
195 |
196 | def od_to_ms_300(od):
197 | """Convert an overall difficulty value into milliseconds to hit an object at
198 | maximum accuracy.
199 |
200 | Parameters
201 | ----------
202 | od : float
203 | The overall difficulty.
204 |
205 | Returns
206 | -------
207 | ms : float
208 | The number of milliseconds to hit an object at maximum accuracy.
209 |
210 | See Also
211 | --------
212 | :func:`slider.mod.ms_300_to_od`
213 | """
214 | return 79.5 - 6 * od
215 |
216 |
217 | def ms_300_to_od(ms):
218 | """Convert the milliseconds to score a 300 into an OD value.
219 |
220 | Parameters
221 | ----------
222 | ms : float
223 | The length of the 300 window in milliseconds.
224 |
225 | Returns
226 | -------
227 | od : float
228 | The OD value that produces a 300 window of length ``ms``.
229 |
230 | See Also
231 | --------
232 | :func:`slider.mod.od_to_ms_300`
233 | """
234 | return (ms - 79.5) / -6
235 |
--------------------------------------------------------------------------------
/slider/position.py:
--------------------------------------------------------------------------------
1 | from collections import namedtuple
2 | import numpy as np
3 |
4 |
5 | class Position(namedtuple("Position", "x y")):
6 | """A position on the osu! screen.
7 |
8 | Parameters
9 | ----------
10 | x : int or float
11 | The x coordinate in the range.
12 | y : int or float
13 | The y coordinate in the range.
14 |
15 | Notes
16 | -----
17 | The visible region of the osu! standard playfield is [0, 512] by [0, 384].
18 | Positions may fall outside of this range for slider curve control points.
19 | """
20 |
21 | x_max = 512
22 | y_max = 384
23 |
24 | def __eq__(self, other):
25 | return self.x == other.x and self.y == other.y
26 |
27 |
28 | class Point(namedtuple("Point", "x y offset")):
29 | """A position and time on the osu! screen.
30 |
31 | Parameters
32 | ----------
33 | x : int or float
34 | The x coordinate in the range.
35 | y : int or float
36 | The y coordinate in the range.
37 | offset : timedelta
38 | The time
39 |
40 | Notes
41 | -----
42 | The visible region of the osu! standard playfield is [0, 512] by [0, 384].
43 | Positions may fall outside of this range for slider curve control points.
44 | """
45 |
46 |
47 | def distance(start, end):
48 | return np.sqrt((start.x - end.x) ** 2 + (start.y - end.y) ** 2)
49 |
--------------------------------------------------------------------------------
/slider/tests/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/llllllllll/slider/2f4437ac002e7eb6e2d0ae6dfc2da04e9fb82075/slider/tests/__init__.py
--------------------------------------------------------------------------------
/slider/tests/test_beatmap.py:
--------------------------------------------------------------------------------
1 | import pytest
2 |
3 | import slider.example_data.beatmaps
4 | import slider.beatmap
5 | import slider.curve
6 | from slider.position import Position
7 | from datetime import timedelta
8 | from math import isclose
9 |
10 |
11 | @pytest.fixture
12 | def beatmap():
13 | return slider.example_data.beatmaps.miiro_vs_ai_no_scenario("Tatoe")
14 |
15 |
16 | def test_parse_beatmap_format_v3():
17 | # v3 is a very old beatmap version. We just want to make sure it doesn't
18 | # error, see #79 and #87 on github.
19 | slider.example_data.beatmaps.example_beatmap(
20 | "Sambomaster - Sekai wa Sore wo Ai to Yobunda ze (ZZT the Fifth) "
21 | "[Normal].osu"
22 | )
23 |
24 |
25 | def test_version(beatmap):
26 | assert beatmap.format_version == 14
27 |
28 |
29 | def test_display_name(beatmap):
30 | assert beatmap.display_name == (
31 | "AKINO from bless4 & CHiCO with HoneyWorks - MIIRO "
32 | "vs. Ai no Scenario [Tatoe]"
33 | )
34 |
35 |
36 | def test_parse_section_general(beatmap):
37 | assert beatmap.audio_filename == "tatoe.mp3"
38 | assert beatmap.audio_lead_in == timedelta()
39 | assert beatmap.preview_time == timedelta(milliseconds=6538)
40 | assert not beatmap.countdown
41 | assert beatmap.sample_set == "Normal"
42 | assert beatmap.stack_leniency == 0.7
43 | assert beatmap.mode == 0
44 | assert not beatmap.letterbox_in_breaks
45 | assert not beatmap.widescreen_storyboard
46 |
47 |
48 | def test_parse_section_editor(beatmap):
49 | assert beatmap.distance_spacing == 1.1
50 | assert beatmap.beat_divisor == 6
51 | assert beatmap.grid_size == 4
52 | assert beatmap.timeline_zoom == 1.8
53 |
54 |
55 | def test_parse_section_metadata(beatmap):
56 | assert beatmap.title == "MIIRO vs. Ai no Scenario"
57 | assert beatmap.title_unicode == "海色 vs. アイのシナリオ"
58 | assert beatmap.artist == "AKINO from bless4 & CHiCO with HoneyWorks"
59 | assert beatmap.artist_unicode == ("AKINO from bless4 & CHiCO with HoneyWorks")
60 | assert beatmap.creator == "monstrata"
61 | assert beatmap.version == "Tatoe"
62 | assert beatmap.source == ""
63 | assert beatmap.tags == [
64 | "kyshiro",
65 | "sukinathan",
66 | "ktgster",
67 | "pishifat",
68 | "smoothie",
69 | "world",
70 | "walaowey",
71 | "toybot",
72 | "sheela901",
73 | "yuii-",
74 | "Sharkie",
75 | "みいろ",
76 | "tv",
77 | "size",
78 | "opening",
79 | "kantai",
80 | "collection",
81 | "kancolle",
82 | "fleet",
83 | "girls",
84 | "magic",
85 | "kaito",
86 | "1412",
87 | "まじっく快斗1412",
88 | "艦隊これくしょん",
89 | "-艦これ-",
90 | ]
91 | assert beatmap.beatmap_id == 735272
92 | assert beatmap.beatmap_set_id == 325158
93 |
94 |
95 | def test_parse_section_difficulty(beatmap):
96 | assert beatmap.hp_drain_rate == 6.5
97 | assert beatmap.circle_size == 4
98 | assert beatmap.overall_difficulty == 9
99 | assert beatmap.approach_rate == 9.5
100 | assert beatmap.slider_multiplier == 1.8
101 | assert beatmap.slider_tick_rate == 1
102 |
103 |
104 | def test_parse_section_timing_points(beatmap):
105 | # currently only checking the first timing point
106 | timing_points_0 = beatmap.timing_points[0]
107 | assert timing_points_0.offset == timedelta()
108 | assert isclose(timing_points_0.ms_per_beat, 307.692307692308)
109 | assert timing_points_0.meter == 4
110 | # sample_set and sample_type omitted, see #56
111 | assert timing_points_0.volume == 60
112 | # inherited is not in class parameter
113 | assert timing_points_0.kiai_mode == 0
114 |
115 |
116 | def test_parse_section_hit_objects(beatmap):
117 | # Only hit object 0 tested for now
118 | hit_objects_0 = beatmap.hit_objects(stacking=False)[0]
119 | assert hit_objects_0.position == Position(x=243, y=164)
120 | assert hit_objects_0.time == timedelta(milliseconds=1076)
121 | # Hit object note `type` is done by subclassing HitObject
122 | assert isinstance(hit_objects_0, slider.beatmap.Slider)
123 | assert hit_objects_0.new_combo
124 | assert not hit_objects_0.combo_skip
125 | # Slider specific parameters
126 | assert hit_objects_0.end_time == timedelta(milliseconds=1178)
127 | assert hit_objects_0.hitsound == 0
128 | assert isinstance(hit_objects_0.curve, slider.curve.Linear)
129 | assert hit_objects_0.curve.points == [
130 | Position(x=243, y=164),
131 | Position(x=301, y=175),
132 | ]
133 | assert round(hit_objects_0.curve.req_length) == 45
134 | assert isclose(hit_objects_0.length, 45.0000017166138)
135 | assert hit_objects_0.ticks == 2
136 | assert isclose(hit_objects_0.num_beats, 0.3333333460489903)
137 | assert hit_objects_0.tick_rate == 1.0
138 | assert isclose(hit_objects_0.ms_per_beat, 307.692307692308)
139 | assert hit_objects_0.edge_sounds == [2, 0]
140 | assert hit_objects_0.edge_additions == ["0:0", "0:0"]
141 | assert hit_objects_0.addition == "0:0:0:0:"
142 |
143 |
144 | def test_hit_objects_stacking():
145 | hit_objects = [
146 | slider.beatmap.Circle(
147 | Position(128, 128), timedelta(milliseconds=x * 10), hitsound=1
148 | )
149 | for x in range(10)
150 | ]
151 |
152 | beatmap = slider.Beatmap(
153 | format_version=14,
154 | audio_filename="audio.mp3",
155 | audio_lead_in=timedelta(),
156 | preview_time=timedelta(),
157 | countdown=False,
158 | sample_set="soft",
159 | stack_leniency=1,
160 | mode=0,
161 | letterbox_in_breaks=False,
162 | widescreen_storyboard=False,
163 | bookmarks=[0],
164 | distance_spacing=1,
165 | beat_divisor=1,
166 | grid_size=1,
167 | timeline_zoom=1,
168 | title="title",
169 | title_unicode="title",
170 | artist="artist",
171 | artist_unicode="artist",
172 | creator="creator",
173 | version="1.0",
174 | source="source",
175 | tags=["tags"],
176 | beatmap_id=0,
177 | beatmap_set_id=0,
178 | hp_drain_rate=5,
179 | circle_size=5,
180 | overall_difficulty=5,
181 | approach_rate=5,
182 | slider_multiplier=1,
183 | slider_tick_rate=1,
184 | timing_points=[],
185 | hit_objects=hit_objects,
186 | )
187 | radius = slider.beatmap.circle_radius(5)
188 | stack_offset = radius / 10
189 |
190 | for i, ob in enumerate(reversed(beatmap.hit_objects(stacking=True))):
191 | assert ob.position.y == 128 - (i * stack_offset)
192 |
193 |
194 | def test_hit_objects_hard_rock(beatmap):
195 | # Only hit object 0 tested for now
196 | hit_objects_hard_rock_0 = beatmap.hit_objects(hard_rock=True, stacking=False)[0]
197 | assert hit_objects_hard_rock_0.position == Position(x=243, y=220)
198 | assert hit_objects_hard_rock_0.curve.points == [
199 | Position(x=243, y=220),
200 | Position(x=301, y=209),
201 | ]
202 |
203 |
204 | def test_legacy_slider_end():
205 | beatmap = slider.example_data.beatmaps.miiro_vs_ai_no_scenario()
206 |
207 | # lazer uses float values for the duration of sliders instead of ints as in
208 | # this library. This means we'll have some rounding errors against the
209 | # expected position of the last tick. `leniency` is the number of pixels of
210 | # rounding error to allow.
211 | # See
212 | # https://github.com/llllllllll/slider/pull/106#issuecomment-1399583672.
213 | def test_slider(slider_, expected_last_tick_pos, end_pos, leniency=2):
214 | assert isinstance(slider_, slider.beatmap.Slider)
215 | expected_x = expected_last_tick_pos.x
216 | expected_y = expected_last_tick_pos.y
217 |
218 | last_tick_true = slider_.true_tick_points[-1]
219 |
220 | # make sure the last tick is where we expect it to be
221 | assert abs(last_tick_true.x - expected_x) <= leniency
222 | assert abs(last_tick_true.y - expected_y) <= leniency
223 |
224 | last_tick = slider_.tick_points[-1]
225 |
226 | # Make sure the actual sliderends didnt get changed
227 | assert abs(last_tick.x - end_pos.x) <= leniency
228 | assert abs(last_tick.y - end_pos.y) <= leniency
229 |
230 | objects = beatmap.hit_objects()
231 |
232 | slider1 = objects[0]
233 | # last tick positions from lazer (and then rounding). See
234 | # https://github.com/llllllllll/slider/pull/106#issuecomment-1399583672.
235 | expected_last_tick_pos1 = Position(x=271, y=169)
236 | # actual ending of this slider
237 | end_pos1 = Position(x=287, y=172)
238 |
239 | # check another slider in the map as well (the slider at 20153ms).
240 | td = timedelta(milliseconds=20153)
241 | slider2 = beatmap.closest_hitobject(td)
242 | expected_last_tick_pos2 = Position(x=196, y=110)
243 | end_pos2 = Position(x=202, y=95)
244 |
245 | test_slider(slider1, expected_last_tick_pos1, end_pos1)
246 | test_slider(slider2, expected_last_tick_pos2, end_pos2)
247 |
248 |
249 | def test_closest_hitobject():
250 | beatmap = slider.example_data.beatmaps.miiro_vs_ai_no_scenario("Beginner")
251 | hit_object1 = beatmap.hit_objects()[4]
252 | hit_object2 = beatmap.hit_objects()[5]
253 | hit_object3 = beatmap.hit_objects()[6]
254 |
255 | middle_t = timedelta(milliseconds=11076 - ((11076 - 9692) / 2))
256 |
257 | assert hit_object1.time == timedelta(milliseconds=8615)
258 | assert hit_object2.time == timedelta(milliseconds=9692)
259 | assert hit_object3.time == timedelta(milliseconds=11076)
260 |
261 | assert beatmap.closest_hitobject(timedelta(milliseconds=8615)) == hit_object1
262 | assert beatmap.closest_hitobject(timedelta(milliseconds=(8615 - 30))) == hit_object1
263 | assert beatmap.closest_hitobject(middle_t) == hit_object2
264 | assert beatmap.closest_hitobject(middle_t, side="right") == hit_object3
265 |
266 |
267 | def test_ar(beatmap):
268 | assert beatmap.ar() == 9.5
269 |
270 |
271 | def test_bpm_min(beatmap):
272 | assert beatmap.bpm_min() == 180
273 |
274 |
275 | def test_bpm_max(beatmap):
276 | assert beatmap.bpm_max() == 195
277 |
278 |
279 | def test_cs(beatmap):
280 | assert beatmap.cs() == 4
281 |
282 |
283 | def test_hp(beatmap):
284 | assert beatmap.hp() == 6.5 # issue #57
285 |
286 |
287 | def test_od(beatmap):
288 | assert beatmap.od() == 9
289 |
290 |
291 | def test_pack(beatmap):
292 | # Pack the beatmap and parse it again to see if there is difference.
293 | packed_str = beatmap.pack()
294 | packed = slider.Beatmap.parse(packed_str)
295 | # Since sections like Colours and Events are currently omitted by
296 | # ``Beatmap.parse``, these sections will be missing in .osu files
297 | # written back from parsed Beatmaps. Fortunately, without these
298 | # sections, rewritten .osu can still be recognized by osu! client.
299 | beatmap_attrs = [
300 | # General section fields
301 | "audio_filename",
302 | "audio_lead_in",
303 | "preview_time",
304 | "countdown",
305 | "sample_set",
306 | "stack_leniency",
307 | "mode",
308 | "letterbox_in_breaks",
309 | "widescreen_storyboard",
310 | # Editor section fields
311 | "distance_spacing",
312 | "beat_divisor",
313 | "grid_size",
314 | "timeline_zoom",
315 | "bookmarks",
316 | # Metadata section fields
317 | "title",
318 | "title_unicode",
319 | "artist",
320 | "artist_unicode",
321 | "creator",
322 | "version",
323 | "source",
324 | "tags",
325 | "beatmap_id",
326 | "beatmap_set_id",
327 | # Difficulty section fields
328 | "hp_drain_rate",
329 | "circle_size",
330 | "overall_difficulty",
331 | "approach_rate",
332 | "slider_multiplier",
333 | "slider_tick_rate",
334 | ]
335 | hitobj_attrs = [
336 | "position",
337 | "time",
338 | "new_combo",
339 | "combo_skip",
340 | "hitsound",
341 | "addition",
342 | ]
343 | slider_attrs = [
344 | "end_time",
345 | "hitsound",
346 | "repeat",
347 | "length",
348 | "ticks",
349 | "num_beats",
350 | "tick_rate",
351 | "ms_per_beat",
352 | "edge_sounds",
353 | "edge_additions",
354 | "addition",
355 | ]
356 | timing_point_attrs = [
357 | "offset",
358 | "ms_per_beat",
359 | "meter",
360 | "sample_type",
361 | "sample_set",
362 | "volume",
363 | "kiai_mode",
364 | ]
365 |
366 | def check_attrs(object1, object2, attr_list):
367 | for attr in attr_list:
368 | assert getattr(object1, attr) == getattr(object2, attr)
369 |
370 | def check_curve(curve1, curve2):
371 | assert type(curve1) is type(curve2)
372 | assert curve1.req_length == curve2.req_length
373 | for point1, point2 in zip(curve1.points, curve2.points):
374 | assert point1 == point2
375 |
376 | check_attrs(beatmap, packed, beatmap_attrs)
377 |
378 | # check hit objects
379 | assert len(beatmap._hit_objects) == len(packed._hit_objects)
380 | for hitobj1, hitobj2 in zip(beatmap._hit_objects, packed._hit_objects):
381 | assert type(hitobj1) is type(hitobj2)
382 | check_attrs(hitobj1, hitobj2, hitobj_attrs)
383 |
384 | if isinstance(hitobj1, slider.beatmap.Slider):
385 | check_attrs(hitobj1, hitobj2, slider_attrs)
386 | check_curve(hitobj1.curve, hitobj2.curve)
387 | elif isinstance(hitobj1, (slider.beatmap.Spinner, slider.beatmap.HoldNote)):
388 | # spinners / hold notes have an additional attribute `end_time`
389 | assert hitobj1.end_time == hitobj2.end_time
390 | # circles has no additional attributes beyond `hitobj_attrs`
391 |
392 | # check timing points
393 | assert len(beatmap.timing_points) == len(packed.timing_points)
394 | for tp1, tp2 in zip(beatmap.timing_points, packed.timing_points):
395 | check_attrs(tp1, tp2, timing_point_attrs)
396 | # make sure both timing points are either inherited or uninherited
397 | assert (tp1.parent is not None) == (tp2.parent is not None)
398 |
--------------------------------------------------------------------------------
/slider/tests/test_collection.py:
--------------------------------------------------------------------------------
1 | import slider.example_data.collections
2 |
3 |
4 | def test_collection_simple():
5 | collection_db = slider.example_data.collections.test_db()
6 | assert collection_db.version == 20190410
7 | assert collection_db.num_collections == 2
8 |
9 | col0, col1 = collection_db.collections
10 | assert col0.num_beatmaps == 3
11 | assert col0.md5_hashes == [
12 | "8a67f16f3c440fa3805c14652306dfe8",
13 | "7b231749a908b6d17163dc3f42143774",
14 | "2af0646c72dee92c89649620e4cdb162",
15 | ]
16 |
17 | assert col1.num_beatmaps == 1
18 | assert col1.md5_hashes == ["637227d9965d5e0ba72c92a27826f5b3"]
19 |
--------------------------------------------------------------------------------
/slider/tests/test_utils.py:
--------------------------------------------------------------------------------
1 | import slider.utils
2 |
3 |
4 | def test_accuracy():
5 | assert slider.utils.accuracy(1, 0, 0, 0) == 1.0
6 | assert round(slider.utils.accuracy(0, 1, 0, 0), 4) == 0.3333
7 | assert round(slider.utils.accuracy(0, 0, 1, 0), 4) == 0.1667
8 | assert slider.utils.accuracy(0, 0, 0, 1) == 0.0
9 | assert round(slider.utils.accuracy(982, 100, 43, 14), 4) == 0.8977
10 |
--------------------------------------------------------------------------------
/slider/utils.py:
--------------------------------------------------------------------------------
1 | from functools import lru_cache
2 | import datetime
3 |
4 |
5 | class lazyval:
6 | """Decorator to lazily compute and cache a value."""
7 |
8 | def __init__(self, fget):
9 | self._fget = fget
10 | self._name = None
11 |
12 | def __set_name__(self, owner, name):
13 | self._name = name
14 |
15 | def __get__(self, instance, owner):
16 | if instance is None:
17 | return self
18 |
19 | value = self._fget(instance)
20 | vars(instance)[self._name] = value
21 | return value
22 |
23 | def __set__(self, instance, value):
24 | vars(instance)[self._name] = value
25 |
26 |
27 | class no_default:
28 | """Sentinel type; this should not be instantiated.
29 |
30 | This type is used so functions can tell the difference between no argument
31 | passed and an explicit value passed even if ``None`` is a valid value.
32 |
33 | Notes
34 | -----
35 | This is implemented as a type to make functions which use this as a default
36 | argument serializable.
37 | """
38 |
39 | def __new__(cls):
40 | raise TypeError("cannot create instances of sentinel type")
41 |
42 |
43 | memoize = lru_cache(None)
44 |
45 |
46 | def accuracy(count_300, count_100, count_50, count_miss):
47 | """Calculate osu! standard accuracy from discrete hit counts.
48 |
49 | Parameters
50 | ----------
51 | count_300 : int
52 | The number of 300's hit.
53 | count_100 : int
54 | The number of 100's hit.
55 | count_50 : int
56 | The number of 50's hit.
57 | count_miss : int
58 | The number of misses
59 |
60 | Returns
61 | -------
62 | accuracy : float
63 | The accuracy in the range [0, 1]
64 | """
65 | points_of_hits = count_300 * 300 + count_100 * 100 + count_50 * 50
66 | total_hits = count_300 + count_100 + count_50 + count_miss
67 | return points_of_hits / (total_hits * 300)
68 |
69 |
70 | def orange(_start_or_stop, *args):
71 | """Range for arbitrary objects.
72 |
73 | Parameters
74 | ----------
75 | start, stop, step : any
76 | Arguments like :func:`range`.
77 |
78 | Yields
79 | ------
80 | value : any
81 | The values in the range ``[start, stop)`` with a step of ``step``.
82 |
83 | Notes
84 | -----
85 | ``o`` stands for object.
86 | """
87 | if not args:
88 | start = 0
89 | stop = _start_or_stop
90 | step = 1
91 | elif len(args) == 1:
92 | start = _start_or_stop
93 | stop = args[0]
94 | step = 1
95 | elif len(args) == 2:
96 | start = _start_or_stop
97 | stop, step = args
98 | else:
99 | raise TypeError(
100 | "orange takes from 1 to 3 positional arguments but"
101 | f" {len(args) + 1} were given",
102 | )
103 |
104 | while start < stop:
105 | yield start
106 | start += step
107 |
108 |
109 | # consume_* helper functions to read osu! binary files
110 |
111 |
112 | def consume_byte(buffer):
113 | result = buffer[0]
114 | del buffer[0]
115 | return result
116 |
117 |
118 | def consume_short(buffer):
119 | result = int.from_bytes(buffer[:2], "little")
120 | del buffer[:2]
121 | return result
122 |
123 |
124 | def consume_int(buffer):
125 | result = int.from_bytes(buffer[:4], "little")
126 | del buffer[:4]
127 | return result
128 |
129 |
130 | def consume_long(buffer):
131 | result = int.from_bytes(buffer[:8], "little")
132 | del buffer[:8]
133 | return result
134 |
135 |
136 | def consume_uleb128(buffer):
137 | result = 0
138 | shift = 0
139 | while True:
140 | byte = consume_byte(buffer)
141 | result |= (byte & 0x7F) << shift
142 | if (byte & 0x80) == 0:
143 | break
144 | shift += 7
145 |
146 | return result
147 |
148 |
149 | def consume_string(buffer):
150 | mode = consume_byte(buffer)
151 | if mode == 0:
152 | return None
153 | if mode != 0x0B:
154 | raise ValueError(
155 | f"unknown string start byte: {hex(mode)}, expected 0 or 0x0b",
156 | )
157 | byte_length = consume_uleb128(buffer)
158 | data = buffer[:byte_length]
159 | del buffer[:byte_length]
160 | return data.decode("utf-8")
161 |
162 |
163 | _windows_epoch = datetime.datetime(1, 1, 1)
164 |
165 |
166 | def consume_datetime(buffer):
167 | windows_ticks = consume_long(buffer)
168 | return _windows_epoch + datetime.timedelta(microseconds=windows_ticks / 10)
169 |
--------------------------------------------------------------------------------