UNPKG

osu-taiko-stable

Version:

osu!stable version of osu!taiko ruleset based on osu!lazer source code.

860 lines (730 loc) 27.7 kB
import * as osu_classes from 'osu-classes'; import { ModCombination, IMod, HitObject, HitWindows, ISlidableObject, SliderPath, HitSample, ControlPointInfo, BeatmapDifficultySection, ISpinnableObject, EventGenerator, RulesetBeatmap, BeatmapConverter, IBeatmap, BeatmapProcessor, DifficultyAttributes, Autoplay, Cinema, DoubleTime, Easy, Flashlight, HalfTime, HardRock, Hidden, Nightcore, NoFail, NoMod, Perfect, Relax, SuddenDeath, PerformanceAttributes, DifficultyHitObject, IHitObject, StrainDecaySkill, Skill, DifficultyCalculator, PerformanceCalculator, IRuleset, IScoreInfo, ReplayFrame, IConvertibleReplayFrame, LegacyReplayFrame, ReplayConverter, IReplayFrame, HitResult, DifficultyRange, Ruleset } from 'osu-classes'; declare class TaikoModCombination extends ModCombination { get mode(): number; protected get _availableMods(): IMod[]; } declare abstract class TaikoHitObject extends HitObject { /** * Default size of a drawable taiko hit object. */ static DEFAULT_SIZE: number; hitWindows: HitWindows; } declare abstract class TaikoStrongHitObject extends TaikoHitObject { /** * Scale multiplier for a strong drawable taiko hit object. */ static STRONG_SCALE: number; /** * Default size of a strong drawable taiko hit object. */ static DEFAULT_STRONG_SIZE: number; /** * Whether this HitObject is a "strong" type. * Strong hit objects give more points for hitting the hit object with both keys. */ get isStrong(): boolean; set isStrong(value: boolean); } declare class DrumRoll extends TaikoStrongHitObject implements ISlidableObject { /** * Drum roll distance that results in a duration of 1 speed-adjusted beat length. */ static readonly BASE_DISTANCE = 100; /** * The length (in milliseconds) between ticks of this drumroll. * Half of this value is the hit window of the ticks. */ tickInterval: number; /** * Numer of ticks per beat length. */ tickRate: number; /** * Velocity of this {@link DrumRoll} */ velocity: number; /** * Duration of this {@link DrumRoll} */ duration: number; /** * Path of this {@link DrumRoll} * For compatibility with slidable hit object interface. */ path: SliderPath; /** * Node samples of this {@link DrumRoll} * For compatibility with slidable hit object interface. */ nodeSamples: HitSample[][]; /** * Repeats of this {@link DrumRoll}. * For compatibility with slidable hit object interface. */ repeats: number; hitWindows: osu_classes.HitWindows; get distance(): number; set distance(value: number); get spans(): number; get spanDuration(): number; get endTime(): number; set endTime(value: number); applyDefaultsToSelf(controlPoints: ControlPointInfo, difficulty: BeatmapDifficultySection): void; createNestedHitObjects(): void; clone(): this; } declare class DrumRollTick extends TaikoHitObject { /** * Whether this is the first (initial) tick of the slider. */ firstTick: boolean; /** * The length (in milliseconds) between this tick and the next. * Half of this value is the hit window of the tick. */ tickInterval: number; /** * The time allowed to hit this tick. */ get hitWindow(): number; hitWindows: osu_classes.HitWindows; clone(): this; } declare class Hit extends TaikoStrongHitObject { get isRim(): boolean; } declare class Swell extends TaikoHitObject implements ISpinnableObject { /** * The number of hits required to complete the swell successfully. */ requiredHits: number; /** * Ending time of this {@link Swell} */ endTime: number; hitWindows: osu_classes.HitWindows; get duration(): number; set duration(value: number); createNestedHitObjects(): void; clone(): this; } declare class SwellTick extends TaikoHitObject { hitWindows: osu_classes.HitWindows; } declare class TaikoEventGenerator extends EventGenerator { static generateDrumRollTicks(drumRoll: DrumRoll): Generator<TaikoHitObject>; static generateSwellTicks(swell: Swell): Generator<TaikoHitObject>; } declare class TaikoBeatmap extends RulesetBeatmap { mods: TaikoModCombination; hitObjects: TaikoHitObject[]; get mode(): number; get maxCombo(): number; get hits(): Hit[]; get drumRolls(): DrumRoll[]; get swells(): Swell[]; } declare class TaikoBeatmapConverter extends BeatmapConverter { /** * Osu!std is generally slower than taiko, so a factor is added to increase * speed. This must be used everywhere slider length or beat length is used. */ static VELOCITY_MULTIPLIER: number; /** * Base osu! slider scoring distance. */ static BASE_SCORING_DISTANCE: number; /** * Because swells are easier in taiko than spinners are in osu!, * taiko multiplies a factor when converting the number of required hits. */ static SWELL_HIT_MULTIPLIER: number; isForCurrentRuleset: boolean; isForManiaRuleset: boolean; taikoDistance: number; taikoDuration: number; tickDistance: number; tickInterval: number; canConvert(_: IBeatmap): boolean; convertBeatmap(original: IBeatmap): TaikoBeatmap; convertHitObjects(beatmap: IBeatmap): Generator<TaikoHitObject>; private _convertHitObject; private _convertHittableObject; private _convertSlidableObject; private _convertSpinnableObject; private _shouldConvertToHits; createBeatmap(): TaikoBeatmap; } declare class TaikoBeatmapProcessor extends BeatmapProcessor { } declare class TaikoDifficultyAttributes extends DifficultyAttributes { /** * The difficulty corresponding to the stamina skill. */ staminaDifficulty: number; /** * The difficulty corresponding to the rhythm skill. */ rhythmDifficulty: number; /** * The difficulty corresponding to the colour skill. */ colourDifficulty: number; /** * The difficulty corresponding to the hardest parts of the map. */ peakDifficulty: number; /** * The perceived hit window for a GREAT hit inclusive of rate-adjusting mods (DT/HT/etc). * Rate-adjusting mods don't directly affect the hit window, * but have a perceived effect as a result of adjusting audio timing. */ greatHitWindow: number; } declare class TaikoAutoplay extends Autoplay { } declare class TaikoCinema extends Cinema { } declare class TaikoDoubleTime extends DoubleTime { } declare class TaikoEasy extends Easy { applyToDifficulty(difficulty: BeatmapDifficultySection): void; } declare class TaikoFlashlight extends Flashlight { } declare class TaikoHalfTime extends HalfTime { } declare class TaikoHardRock extends HardRock { applyToDifficulty(difficulty: BeatmapDifficultySection): void; } declare class TaikoHidden extends Hidden { } declare class TaikoNightcore extends Nightcore { } declare class TaikoNoFail extends NoFail { } declare class TaikoNoMod extends NoMod { } declare class TaikoPerfect extends Perfect { } declare class TaikoRelax extends Relax { } declare class TaikoSuddenDeath extends SuddenDeath { } declare class TaikoPerformanceAttributes extends PerformanceAttributes { /** * The mods which were applied to the beatmap. */ mods: TaikoModCombination; /** * The difficulty performance of a score. */ difficultyPerformance: number; /** * The accuracy performance of a score. */ accuracyPerformance: number; /** * Effective miss count of a score. */ effectiveMissCount: number; /** * Creates new difficulty attributes. * @param mods The mods which were applied to the beatmap. * @param totalPerformance The total performance of a score. */ constructor(mods: TaikoModCombination, totalPerformance: number); } /** * Represents a rhythm change in a taiko map. */ declare class TaikoDifficultyHitObjectRhythm { /** * The difficulty multiplier associated with this rhythm change. */ readonly difficulty: number; /** * The ratio of current difficulty hit object's delta time. * to previous difficulty hit object's delta time for the rhythm change. * A {@link ratio} above 1 indicates a slow-down; * A {@link ratio} below 1 indicates a speed-up. */ readonly ratio: number; /** * Creates an object representing a rhythm change. * @param numerator The numerator for {@link ratio}. * @param denominator The denominator for {@link ratio}. * @param difficulty The difficulty multiplier associated with this rhythm change. */ constructor(numerator: number, denominator: number, difficulty: number); } /** * Encode colour information for a sequence of {@link TaikoDifficultyHitObject}s. * Consecutive {@link TaikoDifficultyHitObject}s of the same hit type * are encoded within the same {@link MonoStreak}. */ declare class MonoStreak { /** * List of {@link DifficultyHitObject}s that are encoded within this {@link MonoStreak}. */ hitObjects: TaikoDifficultyHitObject[]; /** * The parent {@link AlternatingMonoPattern} that contains this {@link MonoStreak} */ parent: AlternatingMonoPattern; /** * Index of this {@link MonoStreak} within it's parent {@link AlternatingMonoPattern} */ index: number; /** * The first {@link TaikoDifficultyHitObject} in this {@link MonoStreak}. */ get firstHitObject(): TaikoDifficultyHitObject; /** * The hit type of all objects encoded within this {@link MonoStreak} */ get isRim(): boolean; /** * How long the mono pattern encoded within is */ get runLength(): number; } /** * Encodes a list of {@link AlternatingMonoPattern}s, grouped together * by back and forth repetition of the same * {@link AlternatingMonoPattern}. * Also stores the repetition interval between this and the previous {@link RepeatingHitPatterns}. */ declare class RepeatingHitPatterns { /** * Maximum amount of {@link RepeatingHitPatterns}s to look back to find a repetition. */ private static MAX_REPETITION_INTERVAL; /** * The {@link AlternatingMonoPattern}s that are grouped together within this {@link RepeatingHitPatterns}. */ readonly alternatingMonoPatterns: AlternatingMonoPattern[]; /** * The parent {@link TaikoDifficultyHitObject} in this {@link RepeatingHitPatterns} */ get firstHitObject(): TaikoDifficultyHitObject; /** * The previous {@link RepeatingHitPatterns}. This is used to determine the repetition interval. */ readonly previous: RepeatingHitPatterns | null; private _repetitionInterval; /** * How many {@link RepeatingHitPatterns} between * the current and previous identical {@link RepeatingHitPatterns}. * If no repetition is found this will have a value of {@link MAX_REPETITION_INTERVAL} + 1. */ get repetitionInterval(): number; private set repetitionInterval(value); constructor(previous: RepeatingHitPatterns | null); /** * Returns true if other is considered a repetition of this pattern. * This is true if other's first two payloads have identical mono lengths. */ private _isRepetitionOf; /** * Finds the closest previous {@link RepeatingHitPatterns} * that has the identical {@link AlternatingMonoPatterns}. * Interval is defined as the amount of {@link RepeatingHitPatterns} * chunks between the current and repeated patterns. */ findRepetitionInterval(): void; } /** * Stores colour compression information for a {@link TaikoDifficultyHitObject}. */ declare class TaikoDifficultyHitObjectColour { /** * The {@link MonoStreak} that encodes this note, only present * if this is the first note within a {@link MonoStreak} */ monoStreak: MonoStreak | null; /** * The {@link AlternatingMonoPattern} that encodes this note, * only present if this is the first note within a {@link AlternatingMonoPattern} */ alternatingMonoPattern: AlternatingMonoPattern | null; /** * The {@link RepeatingHitPattern} that encodes this note, * only present if this is the first note within a {@link RepeatingHitPattern} */ repeatingHitPattern: RepeatingHitPatterns | null; } /** * Represents a single hit object in taiko difficulty calculation. */ declare class TaikoDifficultyHitObject extends DifficultyHitObject { /** * The list of all {@link TaikoDifficultyHitObject} * of the same colour as this {@link TaikoDifficultyHitObject} in the beatmap. */ private readonly _monoDifficultyHitObjects; /** * The index of this {@link TaikoDifficultyHitObject} in {@link monoDifficultyHitObjects}. */ readonly monoIndex: number; /** * The list of all {@link TaikoDifficultyHitObject} that * is either a regular note or finisher in the beatmap */ private readonly _noteDifficultyHitObjects; /** * The index of this {@link TaikoDifficultyHitObject} in {@link noteDifficultyHitObjects}. */ readonly noteIndex: number; /** * The rhythm required to hit this hit object. */ readonly rhythm: TaikoDifficultyHitObjectRhythm; /** * Colour data for this hit object. This is used by colour evaluator * to calculate colour difficulty, but can be used by other skills in the future. */ readonly colour: TaikoDifficultyHitObjectColour; /** * Creates a new difficulty hit object. * @param hitObject The gameplay {@link IHitObject} associated with this difficulty object. * @param lastObject The gameplay {@link IHitObject} preceding hit object. * @param lastLastObject The gameplay {@link IHitObject} preceding last object. * @param clockRate The rate of the gameplay clock. Modified by speed-changing mods. * @param objects The list of all {@link DifficultyHitObject}s in the current beatmap. * @param centreHitObjects The list of centre (don) {@link DifficultyHitObject}s in the current beatmap. * @param rimHitObjects The list of rim (kat) {@link DifficultyHitObject}s in the current beatmap. * @param noteObjects The list of {@link DifficultyHitObject}s that is a hit * (i.e. not a drumroll or swell) in the current beatmap. * @param index The position of this {@link DifficultyHitObject} in the objects list. */ constructor(hitObject: IHitObject, lastObject: IHitObject, lastLastObject: IHitObject, clockRate: number, objects: DifficultyHitObject[], centreHitObjects: TaikoDifficultyHitObject[], rimHitObjects: TaikoDifficultyHitObject[], noteObjects: TaikoDifficultyHitObject[], index: number); /** * List of most common rhythm changes in taiko maps. * The general guidelines for the values are: * - rhythm changes with ratio closer to 1 (that are not 1) are harder to play, * - speeding up is generally harder than slowing down * (with exceptions of rhythm changes requiring a hand switch). */ private static readonly COMMON_RHYTHMS; /** * Returns the closest rhythm change from {@link COMMON_RHYTHMS} required to hit this object. * @param lastObject The gameplay {@link IHitObject} preceding this one. * @param lastLastObject The gameplay {@link IHitObject} preceding last object * @param clockRate The rate of the gameplay clock. */ private _getClosestRhythm; previousMono(backwardsIndex: number): TaikoDifficultyHitObject | null; nextMono(forwardsIndex: number): TaikoDifficultyHitObject | null; previousNote(backwardsIndex: number): TaikoDifficultyHitObject | null; nextNote(forwardsIndex: number): TaikoDifficultyHitObject | null; } /** * Encodes a list of {@link MonoStreak}s. {@link MonoStreak}s with the same * {@link MonoStreak.runLength} are grouped together. */ declare class AlternatingMonoPattern { /** * {@link MonoStreak}s that are grouped together within this {@link AlternatingMonoPattern}. */ readonly monoStreaks: MonoStreak[]; /** * The parent {@link RepeatingHitPatterns} that contains this {@link AlternatingMonoPattern} */ parent: RepeatingHitPatterns; /** * Index of this {@link AlternatingMonoPattern} within it's parent {@link RepeatingHitPatterns} */ index: number; /** * The first {@link TaikoDifficultyHitObject} in this {@link AlternatingMonoPattern}. */ get firstHitObject(): TaikoDifficultyHitObject; /** * Determine if this {@link AlternatingMonoPattern} is a repetition * of another {@link AlternatingMonoPattern}. This is a strict comparison * and is true if and only if the colour sequence is exactly the same. */ isRepetitionOf(other: AlternatingMonoPattern): boolean; /** * Determine if this {@link AlternatingMonoPattern} has the same * mono length of another {@link AlternatingMonoPattern}. */ hasIdenticalMonoLength(other: AlternatingMonoPattern): boolean; } /** * Utility class to perform various encodings. */ declare class TaikoColourDifficultyPreprocessor { /** * Processes and encodes a list of {@link TaikoDifficultyHitObject}s * into a list of {@link TaikoDifficultyHitObjectColour}s, * assigning the appropriate {@link TaikoDifficultyHitObjectColour}s * to each {@link TaikoDifficultyHitObject}, * and pre-evaluating colour difficulty of each {@link TaikoDifficultyHitObject}. */ static processAndAssign(hitObjects: DifficultyHitObject[]): void; /** * Encodes a list of {@link TaikoDifficultyHitObject}s into a list of {@link RepeatingHitPatterns}s. */ private static _encode; /** * Encodes a list of {@link TaikoDifficultyHitObject}s into a list of {@link MonoStreak}s. */ private static _encodeMonoStreak; /** * Encodes a list of {@link MonoStreak}s into a list of {@link AlternatingMonoPattern}s. */ private static _encodeAlternatingMonoPattern; /** * Encodes a list of {@link AlternatingMonoPattern}s into a list of {@link RepeatingHitPatterns}s. */ private static _encodeRepeatingHitPattern; } /** * Calculates the colour coefficient of taiko difficulty. */ declare class Colour extends StrainDecaySkill { protected _skillMultiplier: number; /** * This is set to decay slower than other skills, due to the fact * that only the first note of each encoding class having any difficulty values, * and we want to allow colour difficulty to be able to build up even on slower maps. */ protected _strainDecayBase: number; protected _strainValueOf(current: DifficultyHitObject): number; } /** * Calculates the rhythm coefficient of taiko difficulty. */ declare class Rhythm extends StrainDecaySkill { protected _skillMultiplier: number; protected _strainDecayBase: number; /** * The note-based decay for rhythm strain. * {@link strainDecayBase} is not used here, as it's time- and not note-based. */ private static STRAIN_DECAY; /** * Maximum number of entries in {@link rhythmHistory}. */ private static RHYTHM_HISTORY_MAX_LENGTH; /** * Contains the last {@link RHYTHM_HISTORY_MAX_LENGTH} changes in note sequence rhythms. */ private readonly _rhythmHistory; /** * Contains the rolling rhythm strain. Used to apply per-note decay. */ private _currentRhythmStrain; /** * Number of notes since the last rhythm change has taken place. */ private _notesSinceRhythmChange; protected _strainValueOf(current: DifficultyHitObject): number; /** * Returns a penalty to apply to the current hit object caused by repeating rhythm changes. * Repetitions of more recent patterns are associated with a higher penalty. * @param hitObject The current hit object being considered. */ private _repetitionPenalties; /** * Determines whether the rhythm change pattern starting at * {@link start} is a repeat of any of the {@link mostRecentPatternsToCompare}. */ private _samePattern; /** * Calculates a single rhythm repetition penalty. * @param notesSince Number of notes since the last repetition of a rhythm change. */ private static _repetitionPenalty; /** * Calculates a penalty based on the number of notes since the last rhythm change. * Both rare and frequent rhythm changes are penalised. * @param patternLength Number of notes since the last rhythm change. */ private static _patternLengthPenalty; /** * Calculates a penalty for objects that do not require alternating hands. * @param deltaTime Time (in milliseconds) since the last hit object. */ private _speedPenalty; /** * Resets the rolling strain value and {@link notesSinceRhythmChange} counter. */ private _resetRhythmAndStrain; } /** * Calculates the stamina coefficient of taiko difficulty. * The reference play style chosen uses two hands, with full alternating (the hand changes after every hit). */ declare class Stamina extends StrainDecaySkill { protected _skillMultiplier: number; protected _strainDecayBase: number; protected _strainValueOf(current: DifficultyHitObject): number; } declare class Peaks extends Skill { private static FINAL_MULTIPLIER; private static RHYTHM_SKILL_MULTIPLIER; private static COLOUR_SKILL_MULTIPLIER; private static STAMINA_SKILL_MULTIPLIER; readonly rhythm: Rhythm; readonly colour: Colour; readonly stamina: Stamina; constructor(mods: TaikoModCombination); get colourDifficultyValue(): number; get rhythmDifficultyValue(): number; get staminaDifficultyValue(): number; /** * Returns the p-norm of an n-dimensional vector. * @param p The value of p to calculate the norm for. * @param values The coefficients of the vector. */ private _norm; process(current: DifficultyHitObject): void; /** * For each section, the peak strains of all separate skills * are combined into a single peak strain for the section. * The resulting partial rating of the beatmap is a weighted sum * of the combined peaks (higher peaks are weighted more). * @returns The combined star rating of the beatmap, * calculated using peak strains from all sections of the map. */ get difficultyValue(): number; } /** * A taiko difficulty calculator. */ declare class TaikoDifficultyCalculator extends DifficultyCalculator<TaikoDifficultyAttributes> { private static readonly DIFFICULTY_MULTIPLIER; protected _createSkills(_: IBeatmap, mods: TaikoModCombination): Skill[]; get difficultyMods(): IMod[]; protected _createDifficultyHitObjects(beatmap: IBeatmap, clockRate: number): DifficultyHitObject[]; protected _createDifficultyAttributes(beatmap: IBeatmap, mods: TaikoModCombination, skills: Skill[], clockRate: number): TaikoDifficultyAttributes; /** * Calculates the penalty for the stamina skill for maps with low colour difficulty. * Some maps (especially converts) can be easy to read despite a high note density. * This penalty aims to reduce the star rating of such maps * by factoring in colour difficulty to the stamina skill. */ private static _simpleColourPenalty; /** * Applies a final re-scaling of the star rating. * @param sr The raw star rating value before re-scaling. */ private _rescale; } declare class TaikoPerformanceCalculator extends PerformanceCalculator { attributes: TaikoDifficultyAttributes; private _mods; private _countGreat; private _countOk; private _countMeh; private _countMiss; private _accuracy; private _effectiveMissCount; constructor(ruleset: IRuleset, attributes?: DifficultyAttributes, score?: IScoreInfo); calculateAttributes(attributes?: DifficultyAttributes, score?: IScoreInfo): TaikoPerformanceAttributes; private _computeDifficultyValue; private _computeAccuracyValue; private _addParams; private get _totalHits(); private get _totalSuccessfulHits(); } declare enum TaikoAction { /** * Left (rim) */ LeftRim = 0, /** * Left (centre) */ LeftCentre = 1, /** * Right (centre) */ RightCentre = 2, /** * Right (rim) */ RightRim = 3, } declare class TaikoReplayFrame extends ReplayFrame implements IConvertibleReplayFrame { /** * Button actions of this replay frame. */ actions: Set<TaikoAction>; fromLegacy(currentFrame: LegacyReplayFrame): this; toLegacy(): LegacyReplayFrame; } /** * osu!taiko replay converter. */ declare class TaikoReplayConverter extends ReplayConverter { protected _createConvertibleReplayFrame(): TaikoReplayFrame; protected _isConvertedReplayFrame(frame: IReplayFrame): boolean; } declare class TaikoHitWindows extends HitWindows { private static readonly TAIKO_RANGES; isHitResultAllowed(result: HitResult): boolean; protected _getRanges(): DifficultyRange[]; } /** * osu!taiko ruleset. */ declare class TaikoRuleset extends Ruleset { /** * osu!taiko ruleset ID. */ get id(): number; /** * Applies osu!taiko ruleset to a beatmap. * @param beatmap The beatmap. * @returns A new osu!taiko beatmap with applied ruleset. */ applyToBeatmap(beatmap: IBeatmap): TaikoBeatmap; /** * Applies osu!taiko ruleset and mods to a beatmap. * @param beatmap The beatmap. * @param mods osu!taiko mod combination. * @returns A new osu!taiko beatmap with applied mods. */ applyToBeatmapWithMods(beatmap: IBeatmap, mods?: TaikoModCombination): TaikoBeatmap; /** * Resets a mod combination from a beatmap. * @param beatmap The beatmap. * @returns A new beatmap with no mods. */ resetMods(beatmap: IBeatmap): TaikoBeatmap; /** * Creates a new mod combination by converting legacy mod bitwise. * @param input Mod bitwise or acronyms. * @returns A new mod combination. */ createModCombination(input?: number | string): TaikoModCombination; /** * @returns A new osu!taiko beatmap processor. */ protected _createBeatmapProcessor(): TaikoBeatmapProcessor; /** * @returns A new osu!taiko beatmap converter. */ protected _createBeatmapConverter(): TaikoBeatmapConverter; /** * @returns A new osu!taiko replay converter. */ protected _createReplayConverter(): TaikoReplayConverter; /** * @param beatmap The beatmap for which the calculation will be done. * @returns A new osu!taiko difficulty calculator. */ createDifficultyCalculator(beatmap: IBeatmap): TaikoDifficultyCalculator; /** * @param attributes The difficulty attributes. * @param score Score information. * @returns A new osu!taiko performance calculator. */ createPerformanceCalculator(attributes?: TaikoDifficultyAttributes, score?: IScoreInfo): TaikoPerformanceCalculator; } export { AlternatingMonoPattern, Colour, DrumRoll, DrumRollTick, Hit, MonoStreak, Peaks, RepeatingHitPatterns, Rhythm, Stamina, Swell, SwellTick, TaikoAction, TaikoAutoplay, TaikoBeatmap, TaikoBeatmapConverter, TaikoBeatmapProcessor, TaikoCinema, TaikoColourDifficultyPreprocessor, TaikoDifficultyAttributes, TaikoDifficultyCalculator, TaikoDifficultyHitObject, TaikoDifficultyHitObjectColour, TaikoDifficultyHitObjectRhythm, TaikoDoubleTime, TaikoEasy, TaikoEventGenerator, TaikoFlashlight, TaikoHalfTime, TaikoHardRock, TaikoHidden, TaikoHitObject, TaikoHitWindows, TaikoModCombination, TaikoNightcore, TaikoNoFail, TaikoNoMod, TaikoPerfect, TaikoPerformanceAttributes, TaikoPerformanceCalculator, TaikoRelax, TaikoReplayConverter, TaikoReplayFrame, TaikoRuleset, TaikoStrongHitObject, TaikoSuddenDeath };