@rian8337/osu-base 2.2.0 → 3.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +33 -62
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/typings/index.d.ts +56 -104
package/dist/index.js
CHANGED
|
@@ -311,7 +311,9 @@ class APIRequestBuilder {
|
|
|
311
311
|
})
|
|
312
312
|
.on("complete", async (response) => {
|
|
313
313
|
++this.fetchAttempts;
|
|
314
|
-
|
|
314
|
+
const { statusCode } = response;
|
|
315
|
+
if ((statusCode === 500 || statusCode === 503) &&
|
|
316
|
+
this.fetchAttempts < 5) {
|
|
315
317
|
console.error(`Request to ${url} failed; ${this.fetchAttempts} attempts so far; retrying`);
|
|
316
318
|
await Utils.sleep(0.2);
|
|
317
319
|
return resolve(this.sendRequest());
|
|
@@ -390,7 +392,7 @@ exports.objectTypes = void 0;
|
|
|
390
392
|
})(exports.objectTypes || (exports.objectTypes = {}));
|
|
391
393
|
|
|
392
394
|
/**
|
|
393
|
-
*
|
|
395
|
+
* Represents a two-dimensional vector.
|
|
394
396
|
*/
|
|
395
397
|
class Vector2 {
|
|
396
398
|
/**
|
|
@@ -1305,11 +1307,10 @@ class DifficultyControlPoint extends ControlPoint {
|
|
|
1305
1307
|
* This exists for backwards compatibility with maps that abuse NaN slider velocity behavior on osu!stable (e.g. /b/2628991).
|
|
1306
1308
|
*/
|
|
1307
1309
|
generateTicks;
|
|
1308
|
-
// Generate ticks can be made required in 3.0.
|
|
1309
1310
|
constructor(values) {
|
|
1310
1311
|
super(values);
|
|
1311
1312
|
this.speedMultiplier = values.speedMultiplier;
|
|
1312
|
-
this.generateTicks = values.generateTicks
|
|
1313
|
+
this.generateTicks = values.generateTicks;
|
|
1313
1314
|
}
|
|
1314
1315
|
isRedundant(existing) {
|
|
1315
1316
|
return (this.speedMultiplier === existing.speedMultiplier &&
|
|
@@ -1332,6 +1333,7 @@ class DifficultyControlPointManager extends ControlPointManager {
|
|
|
1332
1333
|
defaultControlPoint = new DifficultyControlPoint({
|
|
1333
1334
|
time: 0,
|
|
1334
1335
|
speedMultiplier: 1,
|
|
1336
|
+
generateTicks: true,
|
|
1335
1337
|
});
|
|
1336
1338
|
controlPointAt(time) {
|
|
1337
1339
|
return this.binarySearchWithFallback(time);
|
|
@@ -1725,7 +1727,12 @@ class Beatmap {
|
|
|
1725
1727
|
* @param stats The statistics used for calculation.
|
|
1726
1728
|
*/
|
|
1727
1729
|
maxDroidScore(stats) {
|
|
1728
|
-
let scoreMultiplier =
|
|
1730
|
+
let scoreMultiplier = 1;
|
|
1731
|
+
for (const mod of stats.mods) {
|
|
1732
|
+
if (mod.isApplicableToDroid()) {
|
|
1733
|
+
scoreMultiplier *= mod.droidScoreMultiplier;
|
|
1734
|
+
}
|
|
1735
|
+
}
|
|
1729
1736
|
const { speedMultiplier } = stats;
|
|
1730
1737
|
if (speedMultiplier >= 1) {
|
|
1731
1738
|
scoreMultiplier *= 1 + (speedMultiplier - 1) * 0.24;
|
|
@@ -1770,7 +1777,12 @@ class Beatmap {
|
|
|
1770
1777
|
maxOsuScore(mods = []) {
|
|
1771
1778
|
const accumulatedDiffPoints = this.difficulty.cs + this.difficulty.hp + this.difficulty.od;
|
|
1772
1779
|
let difficultyMultiplier = 2;
|
|
1773
|
-
|
|
1780
|
+
let scoreMultiplier = 1;
|
|
1781
|
+
for (const mod of mods) {
|
|
1782
|
+
if (mod.isApplicableToOsu()) {
|
|
1783
|
+
scoreMultiplier *= mod.pcScoreMultiplier;
|
|
1784
|
+
}
|
|
1785
|
+
}
|
|
1774
1786
|
switch (true) {
|
|
1775
1787
|
case accumulatedDiffPoints <= 5:
|
|
1776
1788
|
difficultyMultiplier = 2;
|
|
@@ -2018,18 +2030,28 @@ class OsuHitWindow extends HitWindow {
|
|
|
2018
2030
|
}
|
|
2019
2031
|
}
|
|
2020
2032
|
|
|
2021
|
-
// TODO: separate droid/PC mod implementations
|
|
2022
2033
|
/**
|
|
2023
2034
|
* Represents a mod.
|
|
2024
2035
|
*/
|
|
2025
2036
|
class Mod {
|
|
2037
|
+
/**
|
|
2038
|
+
* Whether this mod can be applied to osu!droid.
|
|
2039
|
+
*/
|
|
2040
|
+
isApplicableToDroid() {
|
|
2041
|
+
return "droidRanked" in this;
|
|
2042
|
+
}
|
|
2043
|
+
/**
|
|
2044
|
+
* Whether this mod can be applied to osu!standard.
|
|
2045
|
+
*/
|
|
2046
|
+
isApplicableToOsu() {
|
|
2047
|
+
return "pcRanked" in this;
|
|
2048
|
+
}
|
|
2026
2049
|
}
|
|
2027
2050
|
|
|
2028
2051
|
/**
|
|
2029
2052
|
* Represents the DoubleTime mod.
|
|
2030
2053
|
*/
|
|
2031
2054
|
class ModDoubleTime extends Mod {
|
|
2032
|
-
scoreMultiplier = 1.12;
|
|
2033
2055
|
acronym = "DT";
|
|
2034
2056
|
name = "DoubleTime";
|
|
2035
2057
|
droidRanked = true;
|
|
@@ -2038,14 +2060,12 @@ class ModDoubleTime extends Mod {
|
|
|
2038
2060
|
pcScoreMultiplier = 1.12;
|
|
2039
2061
|
bitwise = 1 << 6;
|
|
2040
2062
|
droidString = "d";
|
|
2041
|
-
droidOnly = false;
|
|
2042
2063
|
}
|
|
2043
2064
|
|
|
2044
2065
|
/**
|
|
2045
2066
|
* Represents the HalfTime mod.
|
|
2046
2067
|
*/
|
|
2047
2068
|
class ModHalfTime extends Mod {
|
|
2048
|
-
scoreMultiplier = 0.3;
|
|
2049
2069
|
acronym = "HT";
|
|
2050
2070
|
name = "HalfTime";
|
|
2051
2071
|
droidRanked = true;
|
|
@@ -2054,14 +2074,12 @@ class ModHalfTime extends Mod {
|
|
|
2054
2074
|
pcScoreMultiplier = 0.3;
|
|
2055
2075
|
bitwise = 1 << 8;
|
|
2056
2076
|
droidString = "t";
|
|
2057
|
-
droidOnly = false;
|
|
2058
2077
|
}
|
|
2059
2078
|
|
|
2060
2079
|
/**
|
|
2061
2080
|
* Represents the NightCore mod.
|
|
2062
2081
|
*/
|
|
2063
2082
|
class ModNightCore extends Mod {
|
|
2064
|
-
scoreMultiplier = 1.12;
|
|
2065
2083
|
acronym = "NC";
|
|
2066
2084
|
name = "NightCore";
|
|
2067
2085
|
droidRanked = true;
|
|
@@ -2070,14 +2088,12 @@ class ModNightCore extends Mod {
|
|
|
2070
2088
|
pcScoreMultiplier = 1.12;
|
|
2071
2089
|
bitwise = 1 << 9;
|
|
2072
2090
|
droidString = "c";
|
|
2073
|
-
droidOnly = false;
|
|
2074
2091
|
}
|
|
2075
2092
|
|
|
2076
2093
|
/**
|
|
2077
2094
|
* Represents the HardRock mod.
|
|
2078
2095
|
*/
|
|
2079
2096
|
class ModHardRock extends Mod {
|
|
2080
|
-
scoreMultiplier = 1.06;
|
|
2081
2097
|
acronym = "HR";
|
|
2082
2098
|
name = "HardRock";
|
|
2083
2099
|
bitwise = 1 << 4;
|
|
@@ -2086,14 +2102,12 @@ class ModHardRock extends Mod {
|
|
|
2086
2102
|
droidScoreMultiplier = 1.06;
|
|
2087
2103
|
pcScoreMultiplier = 1.06;
|
|
2088
2104
|
droidString = "r";
|
|
2089
|
-
droidOnly = false;
|
|
2090
2105
|
}
|
|
2091
2106
|
|
|
2092
2107
|
/**
|
|
2093
2108
|
* Represents the Easy mod.
|
|
2094
2109
|
*/
|
|
2095
2110
|
class ModEasy extends Mod {
|
|
2096
|
-
scoreMultiplier = 0.5;
|
|
2097
2111
|
acronym = "EZ";
|
|
2098
2112
|
name = "Easy";
|
|
2099
2113
|
droidRanked = true;
|
|
@@ -2102,62 +2116,45 @@ class ModEasy extends Mod {
|
|
|
2102
2116
|
pcScoreMultiplier = 0.5;
|
|
2103
2117
|
bitwise = 1 << 1;
|
|
2104
2118
|
droidString = "e";
|
|
2105
|
-
droidOnly = false;
|
|
2106
2119
|
}
|
|
2107
2120
|
|
|
2108
2121
|
/**
|
|
2109
2122
|
* Represents the Precise mod.
|
|
2110
2123
|
*/
|
|
2111
2124
|
class ModPrecise extends Mod {
|
|
2112
|
-
scoreMultiplier = 1.06;
|
|
2113
2125
|
acronym = "PR";
|
|
2114
2126
|
name = "Precise";
|
|
2115
2127
|
droidRanked = true;
|
|
2116
|
-
pcRanked = false;
|
|
2117
2128
|
droidScoreMultiplier = 1.06;
|
|
2118
|
-
pcScoreMultiplier = 1.06;
|
|
2119
|
-
bitwise = Number.NaN;
|
|
2120
2129
|
droidString = "s";
|
|
2121
|
-
droidOnly = true;
|
|
2122
2130
|
}
|
|
2123
2131
|
|
|
2124
2132
|
/**
|
|
2125
2133
|
* Represents the SmallCircle mod.
|
|
2126
2134
|
*/
|
|
2127
2135
|
class ModSmallCircle extends Mod {
|
|
2128
|
-
scoreMultiplier = 1.06;
|
|
2129
2136
|
acronym = "SC";
|
|
2130
2137
|
name = "SmallCircle";
|
|
2131
2138
|
droidRanked = false;
|
|
2132
|
-
pcRanked = false;
|
|
2133
2139
|
droidScoreMultiplier = 1.06;
|
|
2134
|
-
pcScoreMultiplier = 1;
|
|
2135
|
-
bitwise = Number.NaN;
|
|
2136
2140
|
droidString = "m";
|
|
2137
|
-
droidOnly = true;
|
|
2138
2141
|
}
|
|
2139
2142
|
|
|
2140
2143
|
/**
|
|
2141
2144
|
* Represents the ReallyEasy mod.
|
|
2142
2145
|
*/
|
|
2143
2146
|
class ModReallyEasy extends Mod {
|
|
2144
|
-
scoreMultiplier = 0.4;
|
|
2145
2147
|
acronym = "RE";
|
|
2146
2148
|
name = "ReallyEasy";
|
|
2147
2149
|
droidRanked = false;
|
|
2148
|
-
pcRanked = false;
|
|
2149
2150
|
droidScoreMultiplier = 0.4;
|
|
2150
|
-
pcScoreMultiplier = 0.4;
|
|
2151
|
-
bitwise = Number.NaN;
|
|
2152
2151
|
droidString = "l";
|
|
2153
|
-
droidOnly = true;
|
|
2154
2152
|
}
|
|
2155
2153
|
|
|
2156
2154
|
/**
|
|
2157
2155
|
* Represents the Auto mod.
|
|
2158
2156
|
*/
|
|
2159
2157
|
class ModAuto extends Mod {
|
|
2160
|
-
scoreMultiplier = 0;
|
|
2161
2158
|
acronym = "AT";
|
|
2162
2159
|
name = "Autoplay";
|
|
2163
2160
|
droidRanked = false;
|
|
@@ -2166,14 +2163,12 @@ class ModAuto extends Mod {
|
|
|
2166
2163
|
pcScoreMultiplier = 1;
|
|
2167
2164
|
bitwise = 1 << 11;
|
|
2168
2165
|
droidString = "a";
|
|
2169
|
-
droidOnly = false;
|
|
2170
2166
|
}
|
|
2171
2167
|
|
|
2172
2168
|
/**
|
|
2173
2169
|
* Represents the Autopilot mod.
|
|
2174
2170
|
*/
|
|
2175
2171
|
class ModAutopilot extends Mod {
|
|
2176
|
-
scoreMultiplier = 0;
|
|
2177
2172
|
acronym = "AP";
|
|
2178
2173
|
name = "Autopilot";
|
|
2179
2174
|
droidRanked = false;
|
|
@@ -2182,14 +2177,12 @@ class ModAutopilot extends Mod {
|
|
|
2182
2177
|
pcScoreMultiplier = 0;
|
|
2183
2178
|
bitwise = 1 << 13;
|
|
2184
2179
|
droidString = "p";
|
|
2185
|
-
droidOnly = false;
|
|
2186
2180
|
}
|
|
2187
2181
|
|
|
2188
2182
|
/**
|
|
2189
2183
|
* Represents the Flashlight mod.
|
|
2190
2184
|
*/
|
|
2191
2185
|
class ModFlashlight extends Mod {
|
|
2192
|
-
scoreMultiplier = 1.12;
|
|
2193
2186
|
acronym = "FL";
|
|
2194
2187
|
name = "Flashlight";
|
|
2195
2188
|
droidRanked = false;
|
|
@@ -2198,7 +2191,6 @@ class ModFlashlight extends Mod {
|
|
|
2198
2191
|
pcScoreMultiplier = 1.12;
|
|
2199
2192
|
bitwise = 1 << 10;
|
|
2200
2193
|
droidString = "i";
|
|
2201
|
-
droidOnly = false;
|
|
2202
2194
|
}
|
|
2203
2195
|
|
|
2204
2196
|
/**
|
|
@@ -2207,7 +2199,6 @@ class ModFlashlight extends Mod {
|
|
|
2207
2199
|
class ModHidden extends Mod {
|
|
2208
2200
|
static fadeInDurationMultiplier = 0.4;
|
|
2209
2201
|
static fadeOutDurationMultiplier = 0.3;
|
|
2210
|
-
scoreMultiplier = 1.06;
|
|
2211
2202
|
acronym = "HD";
|
|
2212
2203
|
name = "Hidden";
|
|
2213
2204
|
bitwise = 1 << 3;
|
|
@@ -2216,14 +2207,12 @@ class ModHidden extends Mod {
|
|
|
2216
2207
|
droidScoreMultiplier = 1.06;
|
|
2217
2208
|
pcScoreMultiplier = 1.06;
|
|
2218
2209
|
droidString = "h";
|
|
2219
|
-
droidOnly = false;
|
|
2220
2210
|
}
|
|
2221
2211
|
|
|
2222
2212
|
/**
|
|
2223
2213
|
* Represents the NoFail mod.
|
|
2224
2214
|
*/
|
|
2225
2215
|
class ModNoFail extends Mod {
|
|
2226
|
-
scoreMultiplier = 0.5;
|
|
2227
2216
|
acronym = "NF";
|
|
2228
2217
|
name = "NoFail";
|
|
2229
2218
|
droidRanked = true;
|
|
@@ -2232,14 +2221,12 @@ class ModNoFail extends Mod {
|
|
|
2232
2221
|
pcScoreMultiplier = 0.5;
|
|
2233
2222
|
bitwise = 1 << 0;
|
|
2234
2223
|
droidString = "n";
|
|
2235
|
-
droidOnly = false;
|
|
2236
2224
|
}
|
|
2237
2225
|
|
|
2238
2226
|
/**
|
|
2239
2227
|
* Represents the Perfect mod.
|
|
2240
2228
|
*/
|
|
2241
2229
|
class ModPerfect extends Mod {
|
|
2242
|
-
scoreMultiplier = 1;
|
|
2243
2230
|
acronym = "PF";
|
|
2244
2231
|
name = "Perfect";
|
|
2245
2232
|
droidRanked = false;
|
|
@@ -2248,14 +2235,12 @@ class ModPerfect extends Mod {
|
|
|
2248
2235
|
pcScoreMultiplier = 1;
|
|
2249
2236
|
bitwise = 1 << 14;
|
|
2250
2237
|
droidString = "f";
|
|
2251
|
-
droidOnly = false;
|
|
2252
2238
|
}
|
|
2253
2239
|
|
|
2254
2240
|
/**
|
|
2255
2241
|
* Represents the Relax mod.
|
|
2256
2242
|
*/
|
|
2257
2243
|
class ModRelax extends Mod {
|
|
2258
|
-
scoreMultiplier = 0;
|
|
2259
2244
|
acronym = "RX";
|
|
2260
2245
|
name = "Relax";
|
|
2261
2246
|
droidRanked = false;
|
|
@@ -2264,14 +2249,12 @@ class ModRelax extends Mod {
|
|
|
2264
2249
|
pcScoreMultiplier = 0;
|
|
2265
2250
|
bitwise = 1 << 7;
|
|
2266
2251
|
droidString = "x";
|
|
2267
|
-
droidOnly = false;
|
|
2268
2252
|
}
|
|
2269
2253
|
|
|
2270
2254
|
/**
|
|
2271
2255
|
* Represents the ScoreV2 mod.
|
|
2272
2256
|
*/
|
|
2273
2257
|
class ModScoreV2 extends Mod {
|
|
2274
|
-
scoreMultiplier = 1;
|
|
2275
2258
|
acronym = "V2";
|
|
2276
2259
|
name = "ScoreV2";
|
|
2277
2260
|
droidRanked = false;
|
|
@@ -2280,30 +2263,23 @@ class ModScoreV2 extends Mod {
|
|
|
2280
2263
|
pcScoreMultiplier = 1;
|
|
2281
2264
|
bitwise = 1 << 29;
|
|
2282
2265
|
droidString = "v";
|
|
2283
|
-
droidOnly = false;
|
|
2284
2266
|
}
|
|
2285
2267
|
|
|
2286
2268
|
/**
|
|
2287
2269
|
* Represents the SpunOut mod.
|
|
2288
2270
|
*/
|
|
2289
2271
|
class ModSpunOut extends Mod {
|
|
2290
|
-
scoreMultiplier = 0.9;
|
|
2291
2272
|
acronym = "SO";
|
|
2292
2273
|
name = "SpunOut";
|
|
2293
|
-
droidRanked = false;
|
|
2294
2274
|
pcRanked = true;
|
|
2295
|
-
droidScoreMultiplier = 0.9;
|
|
2296
2275
|
pcScoreMultiplier = 0.9;
|
|
2297
2276
|
bitwise = 1 << 12;
|
|
2298
|
-
droidString = "";
|
|
2299
|
-
droidOnly = false;
|
|
2300
2277
|
}
|
|
2301
2278
|
|
|
2302
2279
|
/**
|
|
2303
2280
|
* Represents the SuddenDeath mod.
|
|
2304
2281
|
*/
|
|
2305
2282
|
class ModSuddenDeath extends Mod {
|
|
2306
|
-
scoreMultiplier = 1;
|
|
2307
2283
|
acronym = "SD";
|
|
2308
2284
|
name = "Sudden Death";
|
|
2309
2285
|
droidRanked = false;
|
|
@@ -2312,23 +2288,17 @@ class ModSuddenDeath extends Mod {
|
|
|
2312
2288
|
pcScoreMultiplier = 1;
|
|
2313
2289
|
bitwise = 1 << 5;
|
|
2314
2290
|
droidString = "u";
|
|
2315
|
-
droidOnly = false;
|
|
2316
2291
|
}
|
|
2317
2292
|
|
|
2318
2293
|
/**
|
|
2319
2294
|
* Represents the TouchDevice mod.
|
|
2320
2295
|
*/
|
|
2321
2296
|
class ModTouchDevice extends Mod {
|
|
2322
|
-
scoreMultiplier = 1;
|
|
2323
2297
|
acronym = "TD";
|
|
2324
2298
|
name = "TouchDevice";
|
|
2325
|
-
droidRanked = true;
|
|
2326
2299
|
pcRanked = true;
|
|
2327
|
-
droidScoreMultiplier = 1;
|
|
2328
2300
|
pcScoreMultiplier = 1;
|
|
2329
2301
|
bitwise = 1 << 2;
|
|
2330
|
-
droidString = "";
|
|
2331
|
-
droidOnly = false;
|
|
2332
2302
|
}
|
|
2333
2303
|
|
|
2334
2304
|
/**
|
|
@@ -2393,7 +2363,8 @@ class ModUtil {
|
|
|
2393
2363
|
* @param options Options for parsing behavior.
|
|
2394
2364
|
*/
|
|
2395
2365
|
static droidStringToMods(str, options) {
|
|
2396
|
-
return this.processParsingOptions(this.allMods.filter((m) => m.
|
|
2366
|
+
return this.processParsingOptions(this.allMods.filter((m) => m.isApplicableToDroid() &&
|
|
2367
|
+
str.toLowerCase().includes(m.droidString)), options);
|
|
2397
2368
|
}
|
|
2398
2369
|
/**
|
|
2399
2370
|
* Gets a list of mods from a PC modbits.
|
|
@@ -2402,7 +2373,7 @@ class ModUtil {
|
|
|
2402
2373
|
* @param options Options for parsing behavior.
|
|
2403
2374
|
*/
|
|
2404
2375
|
static pcModbitsToMods(modbits, options) {
|
|
2405
|
-
return this.processParsingOptions(this.allMods.filter((m) => m.bitwise & modbits), options);
|
|
2376
|
+
return this.processParsingOptions(this.allMods.filter((m) => m.isApplicableToOsu() && m.bitwise & modbits), options);
|
|
2406
2377
|
}
|
|
2407
2378
|
/**
|
|
2408
2379
|
* Gets a list of mods from a PC mod string, such as "HDHR".
|