Code Monkey home page Code Monkey logo

rush's Introduction

Rush!

Rush!

Custom ruleset for osu!lazer, based loosely on Muse Dash.

Demo: https://youtu.be/tLs1cqeLJ1U

Discord: https://discord.gg/2P9E8MS

Status

WIP but playable.

Installation

Prebuilt binary releases are available if you are looking to test or play and do not wish to compile yourself.

Releases Page

NOTE: osu!lazer runs custom rulesets only on desktop platforms (Windows, macOS, Linux) for the time being.

The ruleset consists of a single DLL file that you'll need to place in the rulesets subdirectory of your osu!lazer installation.

Installation instructions

  1. Navigate to the osu!lazer data directory. You can do so by opening the settings panel in osu!lazer and clicking on the "open osu! folder" button. Alternatively you can directly navigate to the rulesets directory via your OS directory explorer at the following locations:

    • %AppData%/osu/rulesets on Windows
    • ~/.local/share/osu/rulesets on Linux / macOS

    NOTE: If you have relocated your osu! data directory to another directory, the rulesets directory will be there instead.

  2. Drag and drop the ruleset's DLL file into the rulesets directory.

  3. Have fun! If osu!lazer was running while installing the ruleset, you may need to restart the game in order for the ruleset to appear.

NOTE: Custom Rulesets do not automatically update alongside osu!lazer but have a compatibility mechanism to continue using them on newer game versions. However, some changes made game-side may break that compatibility and require installing a newer version of the ruleset. Thus it is recommended that you periodically head over to the releases page and replace the ruleset DLL in the rulesets directory with the latest available version.

TODO

  • Better player sprite
  • Boss sprite during kiai sections
  • Hammers and other minion variants
  • Custom avatars/abilities via mods?
  • Editor (waiting on updates in lazer)

rush's People

Contributors

acrylic-style avatar dependabot-preview[bot] avatar dependabot[bot] avatar frenzibyte avatar game4all avatar lumpbloom7 avatar programmingpleb avatar royce551 avatar swoolcock avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

rush's Issues

Discord and Donations?

Sorry if this is not the correct place to suggest this, but would it be possible to get a Discord server created for the custom mode for bug finding, suggestion adding, play sharing, map creation, and future skinning?

Also, is there a way to help fund this project? I would full heartedly support osu!rush and help make sure it keeps getting good updates. As someone who has invested a lot of time into Muse Dash I would love to see this custom mode flourish.

How to skin?

I saw that partial skinning support was added a while ago, but how would that be done?
I can't find the location of where the image files would be, and I'd like to make my own since the default fps for the frames and how stiffly it moves is a bit hard on my eyes.

Game not starting when rush is in osu!lazer folder

So my osu lazer doesnt start when rush is in my folder... the newest release which just got pushed, tested it 4 times to make sure its not me buggin out. the game just doesn't start but when i remove rush dll it works fine

System.InvalidOperationException: Cannot call InternalChild unless there's exactly one Drawable in Children (currently 0)!

This popped up internally on sentry. Not sure why, you'd probably know better whether this is somehow possible.

System.InvalidOperationException: Cannot call InternalChild unless there's exactly one Drawable in Children (currently 0)!
  ?, in T Container<T>.get_Child()
  ?, in void DrawableStarSheet.OnReleased(KeyBindingReleaseEvent<RushAction> e)
  ?, in bool KeyBindingContainer<T>.triggerKeyBindingEvent(IDrawable drawable, KeyBindingEvent<T> e)
  ?, in void KeyBindingContainer<T>.PropagateReleased(IEnumerable<Drawable> drawables, InputState state, T released)
  ?, in void KeyBindingContainer<T>.handleNewReleased(InputState state, InputKey releasedKey)
  ?, in bool KeyBindingContainer<T>.Handle(UIEvent e)
  ?, in void Drawable.OnKeyUp(KeyUpEvent e)
  ?, in bool Drawable.TriggerEvent(UIEvent e)
  ?, in TSource Enumerable.TryGetFirst<TSource>(IEnumerable<TSource> source, Func<TSource, bool> predicate, out bool found)
  ?, in Drawable ButtonEventManager<TButton>.PropagateButtonEvent(IEnumerable<Drawable> drawables, UIEvent e)
  ?, in void KeyEventManager.HandleButtonUp(InputState state, List<Drawable> targets)
  ?, in void InputManager.HandleKeyboardKeyStateChange(ButtonStateChangeEvent<Key> keyboardKeyStateChange)
  ?, in void ButtonInput<TButton>.Apply(InputState state, IInputStateChangeHandler handler)
  ?, in void PassThroughInputManager.SyncInputState(InputState state)
  ?, in bool PassThroughInputManager.Handle(UIEvent e)
  ?, in void Drawable.OnKeyUp(KeyUpEvent e)
  ?, in bool Drawable.TriggerEvent(UIEvent e)
  ?, in TSource Enumerable.TryGetFirst<TSource>(IEnumerable<TSource> source, Func<TSource, bool> predicate, out bool found)
  ?, in Drawable ButtonEventManager<TButton>.PropagateButtonEvent(IEnumerable<Drawable> drawables, UIEvent e)
  ?, in void KeyEventManager.HandleButtonUp(InputState state, List<Drawable> targets)
  ?, in void InputManager.HandleKeyboardKeyStateChange(ButtonStateChangeEvent<Key> keyboardKeyStateChange)
  ?, in void UserInputManager.HandleInputStateChange(InputStateChangeEvent inputStateChange)
  ?, in void ButtonInput<TButton>.Apply(InputState state, IInputStateChangeHandler handler)
  ?, in void InputManager.Update()
  ?, in void PassThroughInputManager.Update()
  ?, in bool Drawable.UpdateSubTree()
  ?, in bool CompositeDrawable.UpdateSubTree()
  ?, in void GameHost.UpdateFrame()
  ?, in GameThreadState? GameThread.processFrame()

A feature list i made for things that could be added

As a brief reason why these are not in separate "issues" is because most of these were too small to have as their own or hard to explain without the rest

Muse Dash features

Add the ability to swap the backdrop (either set by skin or chart haven't thought much on that yet)

Allow charts to be able to choose what backdrops to have at what moment just like how Muse Dash has in this chart here
https://youtu.be/hZJaT2gGnhA?si=B4MwMzSYzARRaSzT&t=98

Shader or FG image support

This can be found in a few charts and adds a small effect to gameplay I believe that this could have a really cool use in custom charts if executed right
https://youtu.be/hZJaT2gGnhA?si=B9__HeLMftKS2fYt&t=27

Add character falling after fail (Lowest priority possible)

Really small cosmetic item but could make the gamemode feel more complete
https://youtu.be/Vcg7u1MpLms?si=M1npPCfC2F0iKAR7&t=33

Change the stock theme in the dll to move the healthbar to a different location

Not much to explain here just move the healthbar below the fever meter to be closer to the actual game (could also make the fever meter smaller)
health

More to be added later as i find more

Other gimmicks or ideas

Allow the boss to be changed

To allow the boss activated by the chart to be changed via a theme or a loaded in chart theme

Rolls (ITG)

This is a gimmick that i feel could mix up the gameplay a bit im well aware that a system like this exists but that's for minibosses and they take up both lanes my idea would only take one lane similar to a hold and add combo per each press of a button during the duration of the roll (maybe add a bonus for high presses)
roll concept
A slightly scuffed concept of what it could look like

Chart defined theme

This one pretty much explains itself its just a idea to allow custom charts to use their own theme (possibly add options for what elements the chart can overwrite like backgrounds, characters or the notes)

Beat based sprites

This is a small idea for if the theme chooses to do so instead of animating some elements based by time insteat its set to the current bpm of the song

More to be added later

Crash on osu!laser 2020.717.0

Error:

[runtime] 2020-07-20 06:39:04 [debug]: Pressed (AirPrimary) handled by RushPlayfield.
[runtime] 2020-07-20 06:39:04 [debug]: KeyDownEvent(F, False) handled by RulesetInputManager<T>+RulesetKeyBindingContainer<RushAction>.
[runtime] 2020-07-20 06:39:05 [verbose]: Unhandled exception has been denied .
Unhandled exception. [runtime] 2020-07-20 06:39:05 [error]: An unhandled error has occurred.
[runtime] 2020-07-20 06:39:05 [error]: System.MissingFieldException: Field not found: 'osu.Game.Rulesets.Judgements.DrawableJudgement.Result'.
[runtime] 2020-07-20 06:39:05 [error]: at osu.Framework.Allocation.BackgroundDependencyLoaderAttribute.<>c__DisplayClass6_0.<CreateActivator>b__4(Object target, IReadOnlyDependencyContainer dc)
[runtime] 2020-07-20 06:39:05 [error]: at osu.Framework.Allocation.DependencyActivator.activate(Object obj, IReadOnlyDependencyContainer dependencies)
[runtime] 2020-07-20 06:39:05 [error]: at osu.Framework.Graphics.Drawable.load(IFrameBasedClock clock, IReadOnlyDependencyContainer dependencies)
[runtime] 2020-07-20 06:39:05 [error]: at osu.Framework.Graphics.Drawable.Load(IFrameBasedClock clock, IReadOnlyDependencyContainer dependencies, Boolean isDirectAsyncContext)
[runtime] 2020-07-20 06:39:05 [error]: at osu.Framework.Graphics.Containers.CompositeDrawable.loadChild(Drawable child)
[runtime] 2020-07-20 06:39:05 [error]: at osu.Framework.Graphics.Containers.CompositeDrawable.AddInternal(Drawable drawable)
[runtime] 2020-07-20 06:39:05 [error]: at osu.Game.Rulesets.UI.JudgementContainer`1.Add(T judgement) in /home/ontake/Apps/Games/osu!lazer/osu/osu.Game/Rulesets/UI/JudgementContainer.cs:line 21
[runtime] 2020-07-20 06:39:05 [error]: at osu.Game.Rulesets.Rush.UI.RushPlayfield.onNewResult(DrawableHitObject judgedObject, JudgementResult result)
System.MissingFieldException: Field not found: 'osu.Game.Rulesets.Judgements.DrawableJudgement.Result'.
   at osu.Framework.Allocation.BackgroundDependencyLoaderAttribute.<>c__DisplayClass6_0.<CreateActivator>b__4(Object target, IReadOnlyDependencyContainer dc)
   at osu.Framework.Allocation.DependencyActivator.activate(Object obj, IReadOnlyDependencyContainer dependencies)
   at osu.Framework.Graphics.Drawable.load(IFrameBasedClock clock, IReadOnlyDependencyContainer dependencies)
   at osu.Framework.Graphics.Drawable.Load(IFrameBasedClock clock, IReadOnlyDependencyContainer dependencies, Boolean isDirectAsyncContext)
   at osu.Framework.Graphics.Containers.CompositeDrawable.loadChild(Drawable child)
   at osu.Framework.Graphics.Containers.CompositeDrawable.AddInternal(Drawable drawable)
   at osu.Game.Rulesets.UI.JudgementContainer`1.Add(T judgement) in /home/ontake/Apps/Games/osu!lazer/osu/osu.Game/Rulesets/UI/JudgementContainer.cs:line 21
   at osu.Game.Rulesets.Rush.UI.RushPlayfield.onNewResult(DrawableHitObject judgedObject, JudgementResult result)
   at osu.Game.Rulesets.Objects.Drawables.DrawableHitObject.<apply>b__61_0(DrawableHitObject d, JudgementResult r) in /home/ontake/Apps/Games/osu!lazer/osu/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs:line 196
   at osu.Game.Rulesets.Objects.Drawables.DrawableHitObject.ApplyResult(Action`1 application) in /home/ontake/Apps/Games/osu!lazer/osu/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs:line 473
   at osu.Game.Rulesets.Rush.Objects.Drawables.DrawableNoteSheetHead.CheckForResult(Boolean userTriggered, Double timeOffset)
   at osu.Game.Rulesets.Objects.Drawables.DrawableHitObject.UpdateResult(Boolean userTriggered) in /home/ontake/Apps/Games/osu!lazer/osu/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs:line 491
   at osu.Game.Rulesets.Rush.Objects.Drawables.DrawableNoteSheetCap`1.UpdateResult(Boolean userTriggered)
   at osu.Game.Rulesets.Rush.Objects.Drawables.DrawableNoteSheet.OnPressed(RushAction action)
   at osu.Framework.Input.Bindings.KeyBindingContainer`1.<>c__DisplayClass19_0.<PropagatePressed>b__1(IKeyBindingHandler`1 d)
   at System.Linq.Enumerable.TryGetFirst[TSource](IEnumerable`1 source, Func`2 predicate, Boolean& found)
   at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
   at osu.Framework.Input.Bindings.KeyBindingContainer`1.PropagatePressed(IEnumerable`1 drawables, T pressed, Single scrollAmount, Boolean isPrecise)
   at osu.Framework.Input.Bindings.KeyBindingContainer`1.handleNewPressed(InputState state, InputKey newKey, Boolean repeat, Nullable`1 scrollDelta, Boolean isPrecise)
   at osu.Framework.Input.Bindings.KeyBindingContainer`1.Handle(UIEvent e)
   at System.Linq.Enumerable.TryGetFirst[TSource](IEnumerable`1 source, Func`2 predicate, Boolean& found)
   at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
   at osu.Framework.Input.ButtonEventManager`1.PropagateButtonEvent(IEnumerable`1 drawables, UIEvent e)
   at osu.Framework.Input.KeyEventManager.HandleButtonDown(InputState state, List`1 targets)
   at osu.Framework.Input.ButtonEventManager`1.handleButtonDown(InputState state)
   at osu.Framework.Input.ButtonEventManager`1.HandleButtonStateChange(InputState state, ButtonStateChangeKind kind)
   at osu.Framework.Input.InputManager.HandleKeyboardKeyStateChange(ButtonStateChangeEvent`1 keyboardKeyStateChange)
   at osu.Game.Rulesets.UI.RulesetInputManager`1.HandleInputStateChange(InputStateChangeEvent inputStateChange) in /home/ontake/Apps/Games/osu!lazer/osu/osu.Game/Rulesets/UI/RulesetInputManager.cs:line 77
   at osu.Framework.Input.StateChanges.ButtonInput`1.Apply(InputState state, IInputStateChangeHandler handler)
   at osu.Framework.Input.PassThroughInputManager.SyncInputState(InputState state)
   at osu.Framework.Input.PassThroughInputManager.Handle(UIEvent e)
   at osu.Game.Rulesets.UI.RulesetInputManager`1.Handle(UIEvent e) in /home/ontake/Apps/Games/osu!lazer/osu/osu.Game/Rulesets/UI/RulesetInputManager.cs:line 125
   at System.Linq.Enumerable.TryGetFirst[TSource](IEnumerable`1 source, Func`2 predicate, Boolean& found)
   at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
   at osu.Framework.Input.ButtonEventManager`1.PropagateButtonEvent(IEnumerable`1 drawables, UIEvent e)
   at osu.Framework.Input.KeyEventManager.HandleButtonDown(InputState state, List`1 targets)
   at osu.Framework.Input.ButtonEventManager`1.handleButtonDown(InputState state)
   at osu.Framework.Input.ButtonEventManager`1.HandleButtonStateChange(InputState state, ButtonStateChangeKind kind)
   at osu.Framework.Input.InputManager.HandleKeyboardKeyStateChange(ButtonStateChangeEvent`1 keyboardKeyStateChange)
   at osu.Framework.Input.UserInputManager.HandleInputStateChange(InputStateChangeEvent inputStateChange)
   at osu.Framework.Input.StateChanges.ButtonInput`1.Apply(InputState state, IInputStateChangeHandler handler)
   at osu.Framework.Input.InputManager.Update()
   at osu.Framework.Input.PassThroughInputManager.Update()
   at osu.Framework.Graphics.Drawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Platform.GameHost.UpdateFrame()
   at osu.Framework.Threading.GameThread.ProcessFrame()
--- End of stack trace from previous location where exception was thrown ---
   at osu.Framework.Platform.GameHost.<>c__DisplayClass96_0.<handleException>b__0()
   at osu.Framework.Threading.ScheduledDelegate.RunTaskInternal()
   at osu.Framework.Threading.Scheduler.Update()
   at osu.Framework.Threading.GameThread.ProcessFrame()
   at osu.Framework.Platform.ThreadRunner.RunMainLoop()
   at osu.Framework.Platform.GameHost.windowUpdate()
   at osuTK.GameWindow.RaiseUpdateFrame(Stopwatch watch, Double elapsed, Double& timestamp)
   at osuTK.GameWindow.DispatchUpdateFrame(Stopwatch watch)
   at osuTK.GameWindow.Run(Double updates_per_second, Double frames_per_second)
   at osuTK.GameWindow.Run()
   at osu.Framework.Platform.GameWindow.Run()
   at osu.Framework.Platform.GameHost.Run(Game game)
   at osu.Desktop.Program.Main(String[] args) in /home/ontake/Apps/Games/osu!lazer/osu/osu.Desktop/Program.cs:line 55[runtime] 2020-07-20 06:39:05 [error]: at osu.Game.Rulesets.Objects.Drawables.DrawableHitObject.<apply>b__61_0(DrawableHitObject d, JudgementResult r) in /home/ontake/Apps/Games/osu!lazer/osu/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs:line 19
6
[runtime] 2020-07-20 06:39:05 [error]: at osu.Game.Rulesets.Objects.Drawables.DrawableHitObject.ApplyResult(Action`1 application) in /home/ontake/Apps/Games/osu!lazer/osu/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs:line 473
[runtime] 2020-07-20 06:39:05 [error]: at osu.Game.Rulesets.Rush.Objects.Drawables.DrawableNoteSheetHead.CheckForResult(Boolean userTriggered, Double timeOffset)
[runtime] 2020-07-20 06:39:05 [error]: at osu.Game.Rulesets.Objects.Drawables.DrawableHitObject.UpdateResult(Boolean userTriggered) in /home/ontake/Apps/Games/osu!lazer/osu/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs:line 491
[runtime] 2020-07-20 06:39:05 [error]: at osu.Game.Rulesets.Rush.Objects.Drawables.DrawableNoteSheetCap`1.UpdateResult(Boolean userTriggered)
[runtime] 2020-07-20 06:39:05 [error]: at osu.Game.Rulesets.Rush.Objects.Drawables.DrawableNoteSheet.OnPressed(RushAction action)
[runtime] 2020-07-20 06:39:05 [error]: at osu.Framework.Input.Bindings.KeyBindingContainer`1.<>c__DisplayClass19_0.<PropagatePressed>b__1(IKeyBindingHandler`1 d)
[runtime] 2020-07-20 06:39:05 [error]: at System.Linq.Enumerable.TryGetFirst[TSource](IEnumerable`1 source, Func`2 predicate, Boolean& found)
[runtime] 2020-07-20 06:39:05 [error]: at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
[runtime] 2020-07-20 06:39:05 [error]: at osu.Framework.Input.Bindings.KeyBindingContainer`1.PropagatePressed(IEnumerable`1 drawables, T pressed, Single scrollAmount, Boolean isPrecise)
[runtime] 2020-07-20 06:39:05 [error]: at osu.Framework.Input.Bindings.KeyBindingContainer`1.handleNewPressed(InputState state, InputKey newKey, Boolean repeat, Nullable`1 scrollDelta, Boolean isPrecise)
[runtime] 2020-07-20 06:39:05 [error]: at osu.Framework.Input.Bindings.KeyBindingContainer`1.Handle(UIEvent e)
[runtime] 2020-07-20 06:39:05 [error]: at System.Linq.Enumerable.TryGetFirst[TSource](IEnumerable`1 source, Func`2 predicate, Boolean& found)
[runtime] 2020-07-20 06:39:05 [error]: at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
[runtime] 2020-07-20 06:39:05 [error]: at osu.Framework.Input.ButtonEventManager`1.PropagateButtonEvent(IEnumerable`1 drawables, UIEvent e)
[runtime] 2020-07-20 06:39:05 [error]: at osu.Framework.Input.KeyEventManager.HandleButtonDown(InputState state, List`1 targets)
[runtime] 2020-07-20 06:39:05 [error]: at osu.Framework.Input.ButtonEventManager`1.handleButtonDown(InputState state)
[runtime] 2020-07-20 06:39:05 [error]: at osu.Framework.Input.ButtonEventManager`1.HandleButtonStateChange(InputState state, ButtonStateChangeKind kind)
[runtime] 2020-07-20 06:39:05 [error]: at osu.Framework.Input.InputManager.HandleKeyboardKeyStateChange(ButtonStateChangeEvent`1 keyboardKeyStateChange)
[runtime] 2020-07-20 06:39:05 [error]: at osu.Game.Rulesets.UI.RulesetInputManager`1.HandleInputStateChange(InputStateChangeEvent inputStateChange) in /home/ontake/Apps/Games/osu!lazer/osu/osu.Game/Rulesets/UI/RulesetInputManager.cs:line 77
[runtime] 2020-07-20 06:39:05 [error]: at osu.Framework.Input.StateChanges.ButtonInput`1.Apply(InputState state, IInputStateChangeHandler handler)
[runtime] 2020-07-20 06:39:05 [error]: at osu.Framework.Input.PassThroughInputManager.SyncInputState(InputState state)

More Inputs Should Be Allowed

Currently there are only two available input keys for each Ground and Air. This is fine and all until you get to 4* and higher rated charts where streams start to become more of a driving factor in difficulty. I think at least 8 Keys in total 4 for Air and 4 for Ground would make higher star rating maps more beatable. Especially players who would be coming from Muse Dash and might not be used to Taiko styled keyboard input limitations with only 2 keys for each lane.

idea for skin animations

A possible idea i have for the skinning aspect of things is to allow the skin to use animations.
I know that the skin can do this already but the skin cant set how many frames there are and is locked to the 2 frame limit the gamemode has (This might be a thing already but i haven't looked too much into the theme side of things yet)

Graphical Error: Fever Bar

Since latest update there is error with fever bar. nothing major or game just presenting weird (Cant find a way to upload screenshots so ill add another post with screenshot link)

Approach Rate

If I'm correct, AR has yet to be added. Right now it seems that all maps use the same AR. I realize this ruleset is early on but when you get to adding in ARs please use a BPM based system like used in osu!taiko and osu!mania. Specifically use the one in osu!mania as that one changes that rate the entire playfield moves (equivalent of the osu!rush skeleton/box-thing/character/etc. running faster) instead of osu!taiko which while seeming similar in how it comes from the right, would be problematic when enemies overlap due to changing BPMs. In fact when the BPM changes you could also change the fps that the running animation plays at in order to make the character appear to run faster with the playfield and enemies. Again, loving this ruleset so far. Very happy you made it.

Fever mode

Requirements:

  • Fever bar, builds up based on judgment accuracy
  • Automatic/manual triggering (toggleable in ruleset config)
  • Lasts for ~10 seconds when triggered
  • Large score multiplier while active
  • Should be obvious when the fever bar is full, and while fever mode is active

Um, what are the controls?

Theres no way to view or change the controls, I've just been mashing the keys, I have no idea how to hit purple notes

Bug with the blue notes

When i hit a blue note, or i jump, i cant jump in a lot of time. And a lot of times happens that with a two keys (blue and red at the same time) and later a stream with blue notes and 3 or 4 notes i cant press because of that error. Please fix it xd

To be more like Muse Dash

  • Notes don't miss for hitting too early (sliders too)
  • Hearts aren't actually something you need to physically hit (only collide)
  • Each note that damages the player takes 20 hp respectively, spikes take 30
  • Map speed can vary overtime (dependent on song)
  • +Ghosts, don't necessarily need to hit them but does add to combo 0 penalty for not hitting (unless they're directly next to a note)

Use official hit window?

Feel like current one is way too strict. The original hitting window is pefect=+-50ms, great=+-120ms

Use nested playfields

  1. Will make it easier to select lanes in the editor
  2. Allows us to implement per-playfield scroll algorithms and scroll speeds
  3. Allows us to implement per-playfield Z-ordering

A Way of implementing Hard Rock and Hidden

Wondered if thats at all possible, i have a few ideas in mind:

Hard Rock:

smaller note hitbox meaning you have to be much more accurate aswell as less hearts to give you more health and more health lost per miss lets say like 1.5x more health lost upon a miss.

Hidden:

Notes disappear before they get to the hitbox kinda like mania except rush. maybe have them disappear when they are about a quarter distance away from hitbox.

Sliders+Notes

Sliders and notes that are on the same lane (same position) notes should go above the slider please

Scratchpad

Tasks

  • Installation instructions
  • Better player sprite
  • Rewinding (#32, #33)
  • Boss sprite during kiai sections
  • Saw blades
  • Hammers and other minion variants
  • Health bar
  • Health pickups
  • Custom avatars/abilities via mods

General notes

Avatars

  • Avatars can be represented with a MultiMod mod group.
  • Having no avatar selected will use a default sprite/weapon that has no effect on score.
  • Using an avatar will give special abilities or score bonuses.
  • If autoplay is enabled, the currently selected avatar's weapon will be replaced with a pillow. :)

Boss fights

  • Kiai sections will indicate a boss fight sequence.
  • Shortly prior to the kiai section, the boss will slide in from the side of the screen.
  • The final note in a kiai section will be converted to a boss attack.
  • During the boss fight, minions will be represented by some form of bullet (this can either be done during beatmap conversion, or dynamically during gameplay).

Environments

  • Environments affect which background/parallax/sprites are used.
  • By default, environment will be selected based on average BPM (this will be configurable).
  • Environments should contain a significant transparent area to show storyboards.

Notes on hit object implementations:

Minion

  • If hit, increase combo.
  • If missed, break combo.
  • Additionally, if missed and player is in the same lane, take damage.
  • Also covers hammers and dual orbs.
  • If holding a note sheet on the opposite lane, draw a ghost player.

Note Sheet

  • If hit head, increase combo.
  • If missed head or released before tail, break combo.
  • If hit tail and correctly held for the length of the sheet, increase combo.

Mini Boss

  • Expected to be hit X times.
  • If attacks start too late or the player stops attacking before X has been reached, take damage and break combo.
  • Need to slightly zoom in the view while attacking.

Sawblade

  • If hit, break combo and take damage.
  • If missed but the player is in the same lane, break combo and take damage.
  • If missed but the player is in the opposite lane, increase combo.

Ghost

  • If hit, increase combo.
  • If missed, nothing happens.

Notes

  • If hit, add bonus score.
  • If missed, nothing happens.

Heart

  • If hit, gain health up to maximum of 100%.
  • If missed, nothing happens.

Boss Attack

  • If hit, increase combo.
  • If missed, break combo and take damage.

Idea for multible types of notes

just realized that Rush! only has one type of minion yet muse dash has multiple
my idea to have a chart use multiple minion types is using the combo colors so if the combo color changed the minion type would also change (though there might need to be a limit on the types of combo colors) this could also be used for the miniboss or the boss themselves but i see that to be left more towards skinning than having Rush! do it

"Could not load beatmap correctly"

Every time I try loading a map with Osu! Rush, I get the same error message, "Could not load beatmap correctly!" I'm not sure why this is happening, but I am using the most recent version of Rush, and constantly getting this error everytime I try loading a beatmap.

heart + Slider fix?

Is there a way to remove the too early hit miss, some of the time, whenever a slider shows up with notes under it, almost every time, if there's a heart, it's 85% of the time at the beginning of the slider. and if you hit the heart just a tiny bit earlier than the slider, it'll cause the next note to miss. Removing early hit miss will fix this, but the other solution is simply making the heart a note,

Another unrelated thing, I know Osu's system isn't exactly flexible with all this, but with hearts, they shouldn't actually be a hittable thing at all, you just colide with it and you simply get the health, is there a way to add that to osu? If it is impossible then I guess we can just deal with it, but it would be a nice QoL thing to have

Theme idea maybe?

My idea to get around the possible issue of the theme being a bit too close to the actual game is to do it kind of like how Yoso! does it and has the stock theme (one packed into the dll) be similar to the original game but can easily be told apart and then have a secondary theme in the form of an .osk (if that's the theme file format) that's way closer to the actual game itself

Ground should use the cached information and algorithm for scrolling

Currently the ground scrolls for a duration of groundFlow.Width / 2 per iteration. It should read from the cached scrolling info and use its scrolling algorithm.

Been working on this but for some reason the ground scrolls a bit faster than the hit object container, here's the logic I used:

private double? startTime;

protected override void UpdateAfterChildren()
{
    base.UpdateAfterChildren();

    if (!startTime.HasValue)
        startTime = Time.Current;

    groundFlow.X = scrolling.Algorithm.PositionAt(0f, Time.Current, scrolling.TimeRange.Value, DrawWidth) % (groundFlow.Width / 2f);
}

[Request] BPM Sync

Feature: BPM Sync
Description: Sync gameplay speed to beatmap BPM (like osu!mania BPM sync)

Would love to have something that you can adjust too like in osu!mania when pressing F3/F4, since for some reason the current gameplay speed is faster than my screens refresh rate and because of that when I play it gives me some headache.

carshed when tring to play

Unhandled exception. System.MissingMethodException: Method not found: 'Void osu.Framework.Graphics.Containers.GridContainer.set_Content(osu.Framework.Graphics.Drawable[][])'.

osu version: 56b129e (build and run with -c Debug)
rush version: 2020.904.0

device: ubuntu 18.04

stacktrace:

Unhandled exception. System.MissingMethodException: Method not found: 'Void osu.Framework.Graphics.Containers.GridContainer.set_Content(osu.Framework.Graphics.Drawable[][])'.
   at osu.Game.Rulesets.Rush.UI.RushPlayfield..ctor()
   at osu.Game.Rulesets.Rush.UI.DrawableRushRuleset.CreatePlayfield()
   at System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)
   at System.Lazy`1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor)
   at System.Lazy`1.CreateValue()
   at osu.Game.Rulesets.UI.DrawableRuleset`1.get_Playfield() in /home/sodiumaluminate/osuLazer/osu/osu.Game/Rulesets/UI/DrawableRuleset.cs:line 62
   at osu.Game.Rulesets.UI.DrawableRuleset`1.load(OsuConfigManager config, Nullable`1 cancellationToken) in /home/sodiumaluminate/osuLazer/osu/osu.Game/Rulesets/UI/DrawableRuleset.cs:line 157
--- End of stack trace from previous location where exception was thrown ---
   at osu.Framework.Allocation.BackgroundDependencyLoaderAttribute.<>c__DisplayClass6_0.<CreateActivator>b__4(Object target, IReadOnlyDependencyContainer dc)
   at osu.Framework.Allocation.DependencyActivator.activate(Object obj, IReadOnlyDependencyContainer dependencies)
   at osu.Framework.Allocation.DependencyActivator.activate(Object obj, IReadOnlyDependencyContainer dependencies)
   at osu.Framework.Allocation.DependencyActivator.activate(Object obj, IReadOnlyDependencyContainer dependencies)
   at osu.Framework.Graphics.Drawable.load(IFrameBasedClock clock, IReadOnlyDependencyContainer dependencies)
   at osu.Framework.Graphics.Drawable.Load(IFrameBasedClock clock, IReadOnlyDependencyContainer dependencies, Boolean isDirectAsyncContext)
   at osu.Framework.Graphics.Containers.CompositeDrawable.loadChild(Drawable child)
   at osu.Framework.Graphics.Containers.CompositeDrawable.AddInternal(Drawable drawable)
   at osu.Framework.Graphics.Containers.Container`1.AddRange(IEnumerable`1 range)
   at osu.Game.Screens.Play.Player.addGameplayComponents(Container target, WorkingBeatmap working, IBeatmap playableBeatmap) in /home/sodiumaluminate/osuLazer/osu/osu.Game/Screens/Play/Player.cs:line 260
   at osu.Game.Screens.Play.Player.load(AudioManager audio, OsuConfigManager config) in /home/sodiumaluminate/osuLazer/osu/osu.Game/Screens/Play/Player.cs:line 195
--- End of stack trace from previous location where exception was thrown ---
   at osu.Framework.Allocation.BackgroundDependencyLoaderAttribute.<>c__DisplayClass6_0.<CreateActivator>b__4(Object target, IReadOnlyDependencyContainer dc)
   at osu.Framework.Allocation.DependencyActivator.activate(Object obj, IReadOnlyDependencyContainer dependencies)
   at osu.Framework.Graphics.Drawable.load(IFrameBasedClock clock, IReadOnlyDependencyContainer dependencies)
   at osu.Framework.Graphics.Drawable.Load(IFrameBasedClock clock, IReadOnlyDependencyContainer dependencies, Boolean isDirectAsyncContext)
   at osu.Framework.Graphics.Drawable.LoadFromAsync(IFrameBasedClock clock, IReadOnlyDependencyContainer dependencies, Boolean isDirectAsyncContext)
   at osu.Framework.Graphics.Containers.CompositeDrawable.loadComponents[TLoadable](IEnumerable`1& components, IReadOnlyDependencyContainer dependencies, Boolean isDirectAsyncContext, CancellationToken cancellation)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location where exception was thrown ---
   at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)
--- End of stack trace from previous location where exception was thrown ---
   at osu.Framework.Graphics.Containers.CompositeDrawable.<>c__DisplayClass17_2`1.<LoadComponentsAsync>b__4()
   at osu.Framework.Threading.ScheduledDelegate.RunTaskInternal()
   at osu.Framework.Threading.Scheduler.Update()
   at osu.Framework.Graphics.Drawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Platform.GameHost.UpdateFrame()
   at osu.Framework.Threading.GameThread.ProcessFrame()
--- End of stack trace from previous location where exception was thrown ---
   at osu.Framework.Platform.GameHost.<>c__DisplayClass96_0.<handleException>b__0()
   at osu.Framework.Threading.ScheduledDelegate.RunTaskInternal()
   at osu.Framework.Threading.Scheduler.Update()
   at osu.Framework.Threading.GameThread.ProcessFrame()
   at osu.Framework.Platform.ThreadRunner.RunMainLoop()
   at osu.Framework.Platform.GameHost.windowUpdate()
   at osuTK.GameWindow.RaiseUpdateFrame(Stopwatch watch, Double elapsed, Double& timestamp)
   at osuTK.GameWindow.DispatchUpdateFrame(Stopwatch watch)
   at osuTK.GameWindow.Run(Double updates_per_second, Double frames_per_second)
   at osuTK.GameWindow.Run()
   at osu.Framework.Platform.GameWindow.Run()
   at osu.Framework.Platform.GameHost.Run(Game game)
   at osu.Desktop.Program.Main(String[] args) in /home/sodiumaluminate/osuLazer/osu/osu.Desktop/Program.cs:line 55

full log: rush crash logs

Idea so skins can use a random frame upon an action

I know this probably could fit into #341 but i felt like it would fit better here.
Another idea i had was the ability for the skin to set not only animations but also random frames what i mean by this is if something happens like the player hitting an object the skin can use a randomly pulled sprite instead of either in series with one another or as an animation.
Best example i have to explain this is the hit effect in muse dash for the miniboss.

NullReferenceException occurs when mapping air starsheets with the crafted converter

osu! version: 2022.1123.0
Rush! version: 2022.1118.0

Steps

  1. Create an osu! beatmap with crafted in tags
  2. Place a slider in either the air or dual section (top left / middle left)
  3. Save and return to song select

Expected: A beatmap is made with air/dual starsheets

Actual: The following error occurs and the map isn't playable until the sliders are removed from the air/dual section

Error

2022-12-03 14:14:22 [error]: Failed to calculate beatmap difficulty
2022-12-03 14:14:22 [error]: System.NullReferenceException: Object reference not set to an instance of an object.
2022-12-03 14:14:22 [error]: at osu.Game.Rulesets.Rush.Objects.StarSheet.updateNestedSamples()
2022-12-03 14:14:22 [error]: at osu.Game.Rulesets.Rush.Objects.StarSheet.CreateNestedHitObjects(CancellationToken cancellationToken)
2022-12-03 14:14:22 [error]: at osu.Game.Rulesets.Objects.HitObject.ApplyDefaults(ControlPointInfo controlPointInfo, IBeatmapDifficultyInfo difficulty, CancellationToken cancellationToken) in /var/lib/buildkite-agent/builds/debian-gnu-linux-vm-1/ppy/osu/osu.Game/Rulesets/Objects/HitObject.cs:line 129
2022-12-03 14:14:22 [error]: at osu.Game.Beatmaps.WorkingBeatmap.GetPlayableBeatmap(IRulesetInfo ruleset, IReadOnlyList`1 mods, CancellationToken token) in /var/lib/buildkite-agent/builds/debian-gnu-linux-vm-1/ppy/osu/osu.Game/Beatmaps/WorkingBeatmap.cs:line 299
2022-12-03 14:14:22 [error]: at osu.Game.Rulesets.Difficulty.DifficultyCalculator.preProcess(IEnumerable`1 mods, CancellationToken cancellationToken) in /var/lib/buildkite-agent/builds/debian-gnu-linux-vm-1/ppy/osu/osu.Game/Rulesets/Difficulty/DifficultyCalculator.cs:line 171
2022-12-03 14:14:22 [error]: at osu.Game.Rulesets.Difficulty.DifficultyCalculator.Calculate(IEnumerable`1 mods, CancellationToken cancellationToken) in /var/lib/buildkite-agent/builds/debian-gnu-linux-vm-1/ppy/osu/osu.Game/Rulesets/Difficulty/DifficultyCalculator.cs:line 65
2022-12-03 14:14:22 [error]: at osu.Game.Beatmaps.BeatmapDifficultyCache.computeDifficulty(DifficultyCacheLookup& key, CancellationToken cancellationToken) in /var/lib/buildkite-agent/builds/debian-gnu-linux-vm-1/ppy/osu/osu.Game/Beatmaps/BeatmapDifficultyCache.cs:line 263

Seems to be because NodeSamples is never assigned for air starsheets, only ground starsheets

Slider lane does not need release of key at end

Not sure if this is where a request goes, but is it intended to get a perfect if you do not release the key at end of a slider lane? Never used github so feel free to delete if this is in the wrong location.

New Mod

I was playing a song and thought if it would be a good idea to add a mod or concept where you can only hit certain things.

For example you turn on the mod. and you can customize it.

You can have 2 options:

  1. Sliders do damage

  2. Hitting normal notes makes you lose health. (you can only hit sliders)

  3. Bosses have to be maxed out or counts as combo break. little concept like that. idk just thought for added challenge. or if u obtain a heart insta death or something

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.