Giter Site home page Giter Site logo

ppy / osu Goto Github PK

View Code? Open in Web Editor NEW
14.2K 299.0 2.1K 163.96 MB

rhythm is just a *click* away!

Home Page: https://osu.ppy.sh

License: MIT License

C# 99.95% PowerShell 0.03% Shell 0.02% RenderScript 0.01% GLSL 0.01%
osu rhythm game beatmap-parser hacktoberfest

osu's Introduction

osu! logo

osu!

Build status GitHub release CodeFactor dev chat Crowdin

A free-to-win rhythm game. Rhythm is just a click away!

This is the future – and final – iteration of the osu! game client which marks the beginning of an open era! Currently known by and released under the release codename "lazer". As in sharper than cutting-edge.

Status

This project is under constant development, but we do our best to keep things in a stable state. Players are encouraged to install from a release alongside their stable osu! client. This project will continue to evolve until we eventually reach the point where most users prefer it over the previous "osu!stable" release.

A few resources are available as starting points to getting involved and understanding the project:

Running osu!

If you are just looking to give the game a whirl, you can grab the latest release for your platform:

Latest release:

Windows 10+ (x64) macOS 12+ (Intel, Apple Silicon) Linux (x64) iOS 13.4+ Android 5+

You can also generally download a version for your current device from the osu! site.

If your platform is unsupported or not listed above, there is still a chance you can run the release or manually build it by following the instructions below.

For iOS/iPadOS users: The iOS testflight link fills up very fast (Apple has a hard limit of 10,000 users). We reset it occasionally. Please do not ask about this. Check back regularly for link resets or follow peppy on twitter for announcements. Our goal is to get the game on mobile app stores in early 2024.

Developing a custom ruleset

osu! is designed to allow user-created gameplay variations, called "rulesets". Building one of these allows a developer to harness the power of the osu! beatmap library, game engine, and general UX for a new style of gameplay. To get started working on a ruleset, we have some templates available here.

You can see some examples of custom rulesets by visiting the custom ruleset directory.

Developing osu!

Prerequisites

Please make sure you have the following prerequisites:

When working with the codebase, we recommend using an IDE with intelligent code completion and syntax highlighting, such as the latest version of Visual Studio, JetBrains Rider, or Visual Studio Code with the EditorConfig and C# plugin installed.

Downloading the source code

Clone the repository:

git clone https://github.com/ppy/osu
cd osu

To update the source code to the latest commit, run the following command inside the osu directory:

git pull

Building

From an IDE

You should load the solution via one of the platform-specific .slnf files, rather than the main .sln. This will reduce dependencies and hide platforms that you don't care about. Valid .slnf files are:

  • osu.Desktop.slnf (most common)
  • osu.Android.slnf
  • osu.iOS.slnf

Run configurations for the recommended IDEs (listed above) are included. You should use the provided Build/Run functionality of your IDE to get things going. When testing or building new components, it's highly encouraged you use the osu! (Tests) project/configuration. More information on this is provided below.

To build for mobile platforms, you will likely need to run sudo dotnet workload restore if you haven't done so previously. This will install Android/iOS tooling required to complete the build.

From CLI

You can also build and run osu! from the command-line with a single command:

dotnet run --project osu.Desktop

When running locally to do any kind of performance testing, make sure to add -c Release to the build command, as the overhead of running with the default Debug configuration can be large (especially when testing with local framework modifications as below).

If the build fails, try to restore NuGet packages with dotnet restore.

Testing with resource/framework modifications

Sometimes it may be necessary to cross-test changes in osu-resources or osu-framework. This can be quickly achieved using included commands:

Windows:

UseLocalFramework.ps1
UseLocalResources.ps1

macOS / Linux:

UseLocalFramework.sh
UseLocalResources.sh

Note that these commands assume you have the relevant project(s) checked out in adjacent directories:

|- osu            // this repository
|- osu-framework
|- osu-resources

Code analysis

Before committing your code, please run a code formatter. This can be achieved by running dotnet format in the command line, or using the Format code command in your IDE.

We have adopted some cross-platform, compiler integrated analyzers. They can provide warnings when you are editing, building inside IDE or from command line, as-if they are provided by the compiler itself.

JetBrains ReSharper InspectCode is also used for wider rule sets. You can run it from PowerShell with .\InspectCode.ps1. Alternatively, you can install ReSharper or use Rider to get inline support in your IDE of choice.

Contributing

When it comes to contributing to the project, the two main things you can do to help out are reporting issues and submitting pull requests. Please refer to the contributing guidelines to understand how to help in the most effective way possible.

If you wish to help with localisation efforts, head over to crowdin.

We love to reward quality contributions. If you have made a large contribution, or are a regular contributor, you are welcome to submit an expense via opencollective. If you have any questions, feel free to reach out to peppy before doing so.

Licence

osu!'s code and framework are licensed under the MIT licence. Please see the licence file for more information. tl;dr you can do whatever you want as long as you include the original copyright and license notice in any copy of the software/source.

Please note that this does not cover the usage of the "osu!" or "ppy" branding in any software, resources, advertising or promotion, as this is protected by trademark law.

Please also note that game resources are covered by a separate licence. Please see the ppy/osu-resources repository for clarifications.

osu's People

Contributors

aergwyn avatar bdach avatar cdwcgt avatar craftplacer avatar ddevault avatar drabweb avatar ekrctb avatar evast9919 avatar feodor0090 avatar frenzibyte avatar gagahpangeran avatar game4all avatar hlysine avatar huoyaoyuan avatar itsshamed avatar joehuu avatar jorolf avatar lenitrous avatar miraisubject avatar miterosan avatar mk56-spn avatar naxesss avatar nekodex avatar nyquillerium avatar peppy avatar smoogipoo avatar susko3 avatar tom94 avatar uselesstoucan avatar xexxar 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  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

osu's Issues

Tutorial task: Key Counter

This is a task everyone should attempt before diving in.

Because the lazer code-base is under very rapid refactoring, your task is to create an osu!next inspired UI element in the scratch area (use TestCaseScratch and probably create your own TestCaseKeyCounter before pull requesting). You should design all classes to be decoupled (they don't have knowledge of their calling site).

Implement this key counter (from scratch).

  • The KeyCounter itself should have an IsCounting property which can be set by the parent class to decide whether counts should be incremented or not.
  • Initialisation of the KeyCounter should allow for different buttons to be added dynamically. Like so:
KeyCounter kc = new KeyCounter();
kc.AddKey(new KeyboardCount(@"Z", Key.Z));
kc.AddKey(new KeyboardCount(@"X", Key.X));
kc.AddKey(new MouseCount(@"M1", MouseButton.Left));
kc.AddKey(new MouseCount(@"M2", MouseButton.Right));
Add(kc);
  • KeyboardCount : Count and MouseCount : Count. Count : Drawable and will contain the draw logic for a single counter.
  • KeyboardCount and MouseCount will contain the increment logic by overriding mouse or keyboard events within themselves. make sure to return false when handling input so we can still pass the input back to the rest of the game.
  • The font used by this counter is not yet in-game. Just use the default provided by SpriteText (for the counter) and FontText (for the key name) for now.
  • KeyCounter and Count will need a special override to handle events outside of its drawable bounds. See this comment for more info.

You should start with the smallest part first (Count) and work outwards. Make the Count appear correctly with the key name and current count. make the on-press and on-release as a state property IsLit and have it apply a nice looking tween between states.

Once you have the Count class done and working, make the KeyboardCount and MouseCount, which will add input handling logic depending on the source, toggling the IsLit state.

Once you have all the necessary count types, make the KeyCounter container. It should use FlowContainer to arrange the four counts into the final layout.

To become familiar with Anchor and Origin settings, my blog post may help.

Avoid specifying pixel locations and use a FlowContainer or SizeMode/InheritMode.XY to get relative support.

Ask any questions at all in this thread. This is intended to be a self-guided tutorial for future audiences, so I want to make it as straight-forward as possible. Your feedback will help improve on this process.

Fix toolbar access logic

We need to avoid accessing the central game/Toolbar all over the place to get correct vertical positions. Consider overriding GetAnchoredPosition in OsuGameMode to offset only top-anchored anchors.

Can't run debug build

I'm trying to help with some issues.
I downloaded the zip file, unziped it and opened osu.sln with visual studio.
However, it's telling me that the osu frameworks are unexistent and when i try to run debug it's telling me the following : Visual Studio cannot start debugging because the debug target 'c:\target' is missing. Please build the project and retry, or set the OutputPath and AssemblyName properties appropriately to point at the correct location for the target assembly.

Anyone knows how to fix?

Song Select Screen

song-select----difficulty-select

This is the design for the Song Select screen.

I might miss something here as this was designed many moons ago; so new features and design updates might have been missed here.

There's a lot of components here, I'll do my best to explain each components in detail.

Search & Filter

Functions same as current osu!. Type something, and the carousel will show the results.

Functions on the left side are the grouping filter. "All" and "Recently Played" should be displayed at all times. The third option should be the last used option.

On the right is the sorting options. Extra filter options revealed by clicking the ellipsis.

Carousel

The carousel should feel the same as current osu! build. However, by default, all beatmaps are grouped by song. Beatmap tiles fades away as it reaches the top or bottom.

Song title, song artist and available difficulties are displayed on beatmap tile with text shadow.

Beatmap's cover image is used as background, with 50%-0& black gradient overlay. Blue glow outline on hover.


Above is the carousel area without the carousel. The entire background image is a blurred version of the background (Gaussian Blur 20px, or whatever equiv to it). 50% black overlay on the map and score details area.

Once selected, available difficulties are revealed under the beatmap tile. difficulty title, followed by mapper details are displayed. Star difficulty are shown in the 2nd line. Same blue glow outline on hover.

Beatmap Info


Cover image (or beatmap background image) is shown with beatmap details on it. 50%-0% Black gradient overlay on the cover image.

Beatmap song title and song artist, followed by mapper details. Song length, tempo, node count and slider count.

Score Ranking

Displays the ranking for selected map and difficulty. Ranking filters on top and additional filter on the left. Pressing the ellipsis will reveal additional filter just like the search mod.

Every score tile displays player's avatar, player's name, player's country and team flag, max combo chain, accuracy percentage, total score, score rank and mods used.

Score's font is Venera 500 and rest is Exo 2.

Last displayed tile is slightly faded to indicate there's more. Max 50. No scrollbars.


I'll make a separate new issue for the above.

I'll update these if I missed something.

Can't import beatmap via IPC

After quick investigation, it seems the IPC message isn't received by the primary host at all. I may investigate further, but not assigning myself yet.

I believe it is OS-related (Arch Linux user here).

EDIT: Actually works with absolute, non-unicode paths.

Beatmap Import Crash

I am importing beatmaps to osu!lazer and i have 1 map and i try to import a second one and it dont works

OS:Windows 7
Architecture:x86 / x32

Proposed new beatmap object model

public class BeatmapSetInfo // db bound
{
    [PrimaryKey]
    public int BeatmapSetID { get; set; }
    [sqlite-net-extensions ormy stuff goes here]
    public BeatmapMetadata Metadata { get; set; }
    public string Hash { get; set; }
    public string Path { get; set; }
}

public class BeatmapInfo // db bound
{
    [PrimaryKey]
    public int BeatmapID { get; set; }
    [ormy stuff]
    public BeatmapMetadata Metadata { get; set; }
    [ormy stuff]
    public BaseDifficulty BaseDifficulty { get; set; }
    [ormy stuff]
    public BeatmapSetInfo BeatmapSet { get; set; }
    public string Version { get; set; }
}

public class BeatmapMetadata // db bound
{
    [PrimaryKey, AutoIncrement]
    public int ID { get; set; }

    public int BeatmapSetID { get; set; }
    public string Title { get; set; }
    public string Artist { get; set; }
    public string AudioFile { get; set; }
    public string BackgroundFile { get; set; }
    // ...
}

public class BaseDifficulty // db bound
{
    // ...
}

public class BeatmapSet
{
    public BeatmapSetInfo Info { get; set; }
    public List<Beatmap> Beatmaps { get; set; }
}

public class Beatmap
{
    public BeatmapInfo Info { get; set; }
    public List<HitObject> HitObjects { get; set; }
    // ...
}

// Usage

// Get list of beatmaps in the db (i.e. SongSelect):
var beatmapSets = BeatmapStorage.Query<BeatmapSetInfo>().Where(...) etc

// Save a beatmap to the db
BeatmapSetInfo info = ...;
BeatmapStorage.Update(info);

// Get a full beatmap object:
BeatmapSetInfo setInfo = BeatmapStorage.GetBeatmapSet(113377);
Beatmap beatmap = BeatmapStorage.GetBeatmap(setInfo.Beatmaps[0]);

No user scores on the new site's beatmap pages.

When looking at the new site I noticed something that might have just been forgotten when making it. There is a tab you can click that will show your friends scores on the beatmap, but no matter how hard you look your personal score won't be among them. I know in game it shows personal scores among friends scores. I've checked on multiple songs that I have scores on and they are all the same. I know this isn't only me because I had my friend check as well. (Keep in mind, to view this you need to be supporter)

Toolbar button labels off-center

All of the buttons in the toolbar have their icons shifted to the left. I was hesitant to report this because in peppy's video he shared on twitter, they were centered and everything looked fine. But that's not the case for me. I have not as of yet made any changes to the codebase, so it's not anything on my end.

new osu bug

I apologize in advance if I'm just being ignorant.

Conflict with Breevy causes quick retry key to go awry

Osu version: b20161101.2

Breevy is a windows application that mimics Textexpander, in which the user types snippets which are automatically replaced with some predefined text, launches applications and stuff like that. It has been recently featured in a Humble Bundle, so it may be possible other people may stumble on this problem too.

Steps to reproduce:

  1. With Breevy running, start Osu. (starting Breevy while Osu is running has the same effect)
  2. Start any song, no matter the mode.
  3. Anytime during play, hit the tilde key (quick retry default button). It is not necessary to hold it for the bug to trigger.
  4. Try hitting any key in the keyboard. Doesn't matter if it is mapped to anything in Osu or not.

Expected behavior: Song restart and keyboard function as usual.

Actual behavior:

  • Quick retry button doesn't work, even if held;
  • From now on, any key you hit causes the song to enter a retry loop, as if the retry button was held, even if nothing is being pressed. Hitting the retry button once again breaks the loop. Hitting it twice causes the keyboard to return to normal (But hitting the retry button again will start everything all over).
  • Mouse buttons still work as intended

Confirmed workarounds:

  • Remapping the retry button to F13 solved the issue.
  • Closing Breevy solved the issue.

Not sure if this is something on Breevy's side or Osu's. Might be on Osu since I didn't see any problems with other applications, including some pretty keyboard-heavy (like Blender), but I thought I could let you guys know. It seems that Breevy is causing the input to get stuck, and hitting it twice resets the behavior. I've recorded a reproduction. If anyone wants to see it, just let me know.

How to Build the Source code?

i cannot build because there are 1266 Errors caused of osu.Framework it says it does not exist. how to build it??

Licence choice suggestion

Hi.

As for GPLv3 limiting "iOS app store compatibility", I can think of some solutions.

First of all - as long as you have full copy-rights to the entire code base, you can dual-license it.

Dual licensing can be of any form the copyright holder wants:

  • GPLv3 and MIT/BSD
  • GPLv3 and proprietary license (whether paid or "freeware") for iOS app.
  • etc. - Sky is the limit.

So the real issue as I understand it boils down to having full copy-rights for the whole base. Possible solutions for that:

  1. Use MIT or BSD license - the downside is that anyone can make their own versions proprietary. I wouldn't really recommend this one.
  2. Use GPL but don't accept code contributions from community, at least not for the iOS version - when all the codebase is written by you / your team, then you have the full rights for all of the code base from the start. I consider this not really a solution and against the spirit of Open Source (it'd be still "Free as in Freedom", though, I think...).
  3. ("The middle way"): Contributor License Agreements: Use GPL, but accept contributions only from people who agree to sort of dual-license their modifications (at least for the iOS version) - they release it under GPL, but also give you special permission to do whatever you want with the code - including the right to re-license the whole thing under a license compatible with iOS app store.

I think the CLA way could work better than other alternatives I can think of.
It can be a bit controversial, but it's the only way I can think of that would both liberate the code (GPL) and allow you to make iOS store releases without risk of an unhappy contributor making claims to take down the app from the store.

Disclaimer: I am not a lawyer, nor a license expert.

I cant compile project

Well, why i cant compile project's last version? The earliest project compliles normal...
gn-s77jo95q
Translate from russian: "Could not find metadata file PATH".

Options meta issue

Options Handling

Things that need doing around maintaining your settings:

  • Loading/configuration
    • Defaults
    • Dependent options - WIP
  • UI - WIP
    • Options sections
    • Jump to section sidebar
    • Sidebar expands on hover like old osu
    • As you scroll, the nav should get updated
    • Animate the pop in of the panel and the sidebar seperately
  • UI wired up to bindables
    • booleans (checkboxes)
    • strings (text boxes)
    • enums (dropdowns)
    • numbers (sliders)
  • Deal with overlay clicky issues on desktop
  • Rework options a bit for osu!next (some categories could be reworked)
  • Tooltips
  • Logging in
  • Hide or show relevant settings based on platform
  • Offset wizard
  • Keybindings
    • osu!mania layout
  • Skin stuff
  • Maintenance options
  • Per-user options

German translation for jizz.ppy.sh

    "de.users": {
        login: {
            username: "Benutzername"
            , password: "Passwort"
            , button: "Login"
            , remember: "Eingeloggt bleiben"
            , title: "Bitte logge dich ein um fortzufahren"
            , failed: "Inkorrekte Logininformationen"
            , register: "Noch keinen Account? Klicke :here!"
            , forgot: "Du hast ein Passwort vergessen? Setze es :here zurück!"
            , beta: {
                main: "Der Zugriff auf die Beta-Inhalte in momentan nur privilegierten Nutzern möglich."
                , small: "(Supporters bekommen es bald auch!)"
            }
            , here: "hier"
        }
        , anonymous: {
            login: "Einloggen"
            , username: "Gast"
        }
        , logout: {
            _: "Ausloggen"
            , confirm: "Bist du sicher das du dich ausloggen möchtest? :("
        }
    }
    , "de.help": []
    , "de.ranking": []
    , "de.common": {
        count: {
            item: ":count unit|:count units" //dunno what is meant with that so I cant translate this
        }
        , pagination: {
            previous: "verherige"
            , next: "nächste"   // ae 
        }
    }
    , "de.layout": {
        menu: {
            home: {
                _: "home"
                , getNews: "news"
                , getChangelog: "changelog"
                , getDownload: "download"
                , getIcons: "icons"
            }
            , help: {
                _: "help"
                , getWiki: "wiki"
                , getFaq: "faq"
                , getSupport: "support"
            }
            , beatmaps: {
                _: "beatmaps"
                , getListing: "listing"
                , getPacks: "Pakete"
                , getCharts: "charts"
                , getModding: "modding"
                , moddingreact: "modding"
                , index: "listing"
            }
            , ranking: {
                _: "ranking"
                , getOverall: "Generell"
                , getCountry: "Land"
                , getCharts: "charts"
                , getMapper: "mapper"
                , index: "Generell"
            }
            , community: {
                _: "community"
                , getForum: "forum"
                , getChat: "chat"
                , getLive: "live"
                , profile: "profil"
                , "forum-topics-create": "forum"
                , "forum-topics-show": "forum"
                , "forum-forums-index": "forum"
                , "forum-forums-show": "forum"
            }
            , error: {
                _: "Fehler"
                , 404: "Nicht verfügbar"
                , 403: "Verboten"
                , 401: "Unbefugt"
                , 500: "Irgend etwas ist kapputgegangen"
                , 503: "Wartungsarbeiten"
            }
            , user: {
                _: "user"
                , getLogin: "Einloggen"
                , disabled: "Gesperrt"
                , register: "Registeren"
                , reset: "Wiederherstellen"
                , "new": "Neu"
                , logout: "Ausloggen"
            }
            , store: {
                _: "store"
                , getListing: "listing"
                , getCart: "Einkaufswagen"
                , getAdmin: "admin"
                , getCheckout: "Bezahlen"
                , getInvoice: "invoice"
                , getProduct: "produkt"
                , "new": "Neu"
                , home: "home"
                , index: "home"
                , thanks: "Danke"
            }
        }
        , errors: {
            404: {
                error: "Seite nicht verfügbar"
                , description: "Entschuldigung, aber die Seite die du angefordert hat gibt es nicht!"
                , link: !1
            }
            , 403: {
                error: "Du solltest nicht hier sein."
                , description: "Du kannst natürlich versuchen woanders hinzugehen."
                , link: !1
            }
            , 401: {
                error: "Du solltest nicht hier sein."
                , description: "Du kannst natürlich versuchen woanders hinzugehen. Oder du loggst dich ein."
                , link: !1
            }
            , 500: {
                error: "Oh nein! Irgendetwas ist kapputgegangen! ;_;"
                , description: "Wir werden automatisch von diesen Fehler benachrichtigt."
                , link: !1
            }
            , fatal: {
                error: "Oh nein! Irgendetwas ist schlimm kapputgegangen! ;_;"
                , description: "Wir werden automatisch von jeden Fehler benachrichtigt."
                , link: !1
            }
            , 503: {
                error: "Wartungsarbeiten!"
                , description: "Wartungsarbeiten finden innerhalb 5 Sekunden bis 10 Minuten statt. Falls wir dann immernoch nicht erreichbar sind, klicke diesen :link für mehr Informationen."
                , link: {
                    text: "@osustatus"
                    , href: "https://twitter.com/osustatus"
                }
            }
            , reference: "Just in case, here's a code you can give to support!"
        }
    }
    , "de.community": {
        profile: {
            404: "Benutzer wurde nicht gefunden! ;_;"
            , avatar: ":username's Avatar"
            , current_location: "Befindet sich momentan in :location."
            , first_members: "ist schon ein Mitglied von Osu! seit dem Osu! existiert"
            , is_supporter: "osu!Supporter"
            , lastvisit: "Letzes mal gesehen :date."
            , joined_at: "Spieler seit :date"
            , origin: "Von :country."
            , plays_with: {
                _: "Plays with"
                , keyboard: "Tastertur"
                , mouse: "Maus"
                , tablet: "Tablet"
                , touch: "Touch Screen"
            }
            , missingtext: "Du hast dich vielleicht verschrieben! (oder der Benutzer wurde gebannt)"
            , stats: {
                hit_accuracy: "Treffgenauigkeit"
                , level: "Level :level"
                , maximum_combo: "Maximale Combo"
                , play_count: "Runden gespielt"
                , ranked_score: "Ranked Score"
                , replays_watched_by_others: "Aufzeichnungen, welche von anderen geschaut wurden"
                , score_ranks: ""
                , total_hits: "Ingesammte Treffer"
                , total_score: "Ingesammter Score"
            }
            , title: "profil / :username"
        }
    }
    , "en.beatmaps": {
        moddingreact: "modding"
        , listing: {
            search: {
                prompt: "Schreibe in Stichworten..."
                , options: "Mehr Suchoptionen"
            }
            , mode: "Modus"
            , status: "Rank Status"
            , all: "Alle"
            , "ranked-approved": "Ranked & Approved"
            , faves: "Favoriten"
            , modreqs: "Mod Requests"
            , pending: "Pending"
            , "mapped-by": "erstellt von :mapper"
            , source: "from :source"
            , "load-more": "Lade mehr..."
        }
        , modding: {
            portal: "Modding Portal"
            , discussion: "Beatmap Discussion"
            , metadata: {
                title: "Titel"
                , artist: "Künstler"
                , tags: "Tags"
                , source: "Quelle"
                , unicode: {
                    artist: "Unicode Künstler"
                    , title: "Unicode Titel"
                }
            }
            , comments: {
                comment: "Geben sie ein Kommentar ein..."
                , time: "Geben sie eine Zeit and (Optional)"
                , reply: "Schreibe hier um zu antworten..."
                , missing: "Es scheint wo als wäre hier nichts. Tut mir leid deswegen."
            }
            , feedback: {
                feedback: "Generelles Feedback"
                , difficulty: "Difficulty Specific"
                , praise: "Praise|Praise"
                , suggestion: "Vorschlag|Vorschläge"
                , problem: "Problem|Probleme"
                , nominate: "Nominierter|Nominierte"
                , resolved: "Resolved"
            }
            , helptext: {
                time: "Kopiere hier aus den Editor eine Zeit rein (CTRL+C, CTRL+V)"
                , nominate: "See the :ranking for a list of criteria that beatmaps must meet to pass into qualification."
                , ranking: "ranking criteria"
                , warning: "Don't just nominate because you like the mapper; nominate because a map is ready to be ranked."
                , comment: "Leave a comment with your mod or praise, and if possible, attach the mod to your post!"
                , confirm: "I acknowledge that nominating maps with objective issues will lead to losing mod score, or having my ability to nominate removed."
            }
            , errors: {
                type: "You didn't specify a comment type!"
                , "Zugriff verweigert": "Du bist hierzu nicht befugt."
                , invalid: "Your mod was automatically rejected. Mods should be between 15 and 800 characters long."
                , silenced: "You cannot post mods while silenced. Please try again later."
                , missing: "Beatmap not found. It may have been deleted after you loaded the page!"
                , beatmap: "You tried to comment on a beatmap that is not part of this set."
                , unknown: "Ein unbekannter Fehler ist aufgetreten. Wir wunden ebenfalls Informiert!"
                , "Kein kommentar": "Du musst ein Kommtar hinterlassen."
            }
            , success: {
                comment: "Kommentar Geposted!"
                , reply: "Antwort Geposted!"
                , nomination: "Nomination Posted!"
                , edit: "Post Editiert!"
            }
        }
        , "bat-tools": {
            buttons: {
                "lösche-map": "Lösche Beatmap"
                , "unrank-map": "Unranke Beatmap"
                , "lösche-scores": "Lösche Scores"
                , "graveyard-map": "Graveyard Map"
            }
        }
        , bss: {
            errors: {
                missing: "Tut mir leid aber die Beatmap existiert nicht."
                , "zugriff-verweitert": "Diese Beatmap gehört nicht dir."
                , ranked: "Disese Beatmap ist bereits geranked"
                , graveyarded: "Diese Beatmap ist auf den Friedhof. Gehe zu deiner Beatmap auf der Beatmapseite um sie wiederzubeleben"
            }
        }
    }
    , "de.home": {
        news: {
            slogan: "Rhytmus ist nur ein *klick* entfernt!"
        }
    }
    , "de.store": {
        admin: {
            warehouse: "Warenhaus"
        }
        , checkout: {
            pay: "Bezahle mit Paypal"
        }
        , order: {
            item: {
                quantity: "Anzahl"
            }
        }
        , product: {
            name: "Name"
        }
    }
    , "de.api": {
        errors: {
            csrf: "Zugriff verweigert"
            , missing: "Nicht gefunden"
        }
    }
    , "de.forum": {
        pinned_topics: "Gepinnente Themen"
        , post: {
            create: {
                advanced: {
                    hide: "Verstecke erweiterten Editor"
                    , show: "Zeige erweiterten Editor"
                }
            }
            , confirm_delete: "Willst du wirklich den Post löschen?"
            , edited: "Zuletzt von :user am :when, editiert. :count Mal wurdes insgesammt editiert ."
            , posted_at: "posted :when"
        }
        , search: {
            go_to_post: "Gehe zu Post"
            , post_number_input: "Geben sie die Post nummer ein"
            , total_posts: ":posts_count Posts insgesammt"
        }
        , subforums: "Subforums"
        , title: "osu!community"
        , topic: {
            create: {
                placeholder: {
                    body: "Schreibe hier deinen Inhalt rein"
                    , title: "Klicke hier um den Titel zu setzen"
                }
                , preview: "Vorschau"
                , submit: "Veröffentlischen"
            }
            , go_to_latest: "Zeige letzen Post"
            , latest_post: ":when von :user"
            , latest_reply_by: "letze Antwort von :user"
            , new_topic: "Poste neues Thema"
            , post_edit: {
                cancel: "Abbrechen"
                , post: "Editieren"
            }
            , post_reply: "Post"
            , reply_box_placeholder: "Schreibe hier um zu antworten"
            , started_by: "von :user"
        }
        , topics: "Themen"
    }
    , "de.bbcode": {
        bold: "Bold"
        , heading: "Header"
        , image: "Image"
        , italic: "Italic"
        , link: "Link"
        , list: "Liste"
        , list_numbered: "Numerierte Liste"
        , size: {
            _: "Schriftgröße"
            , tiny: "Wintzig"
            , small: "Klein"
            , normal: "Normal"
            , large: "Groß"
        }
        , spoilerbox: "Spoiler Box"
        , strikethrough: "Durchgestrichen"
    }

Issues with top of window and cursor position on Linux

While working on osu on Linux, the top 30 pixels of the frame seem to be cut off and the cursor position offset from the actual cursor position.

However, (0,0) is still in the top left corner, in that 'dead' space. (I threw in something to log the input mouse location when it changes, as shown in the terminal)

screenshot_20161014_205320

Those two images were using Intel's integrated graphics/drivers, but it doesn't look so pretty with the open source AMD drivers:

screenshot_20161014_205851

The login shows password

Normally when you login you have your password so it doesn't show. This version has the password showing. It is a quick fix and minor issue but I think it is a good idea to point it out.

Proof!
http://imgur.com/a/Lu2Sc

Game registers mouse clicks and scroll events when unfocused

This can be easily replicated on the current master branch (10.27.16)

Replication Procedure:

  • Compile osu! on Any Arch or Configuration
  • Open another program of choice
  • try scrolling or clicking while the game is unfocused and the 2nd program on the foreground

(Note: program from Step 2 should be within the Game Window)

Crash while trying to play (linux)

what i did:
compiled for linux (Archlinux, via aur)
started, clicked on play

LANG=C osu-native                                                                    :(

Unhandled Exception:
System.NullReferenceException: Object reference not set to an instance of an object
  at osu.Game.Screens.Select.PlaySongSelect.start () [0x0001f] in <2a2d939806804702985a715d7ebaa5be>:0 
  at osu.Framework.Graphics.Containers.ClickableContainer.OnClick (osu.Framework.Input.InputState state) [0x0000d] in <e36fb3c16a25449f93b9a9f267b2ed35>:0 
  at osu.Framework.Graphics.UserInterface.Button.OnClick (osu.Framework.Input.InputState state) [0x0004f] in <e36fb3c16a25449f93b9a9f267b2ed35>:0 
  at osu.Framework.Graphics.Drawable.TriggerClick (osu.Framework.Input.InputState state) [0x00008] in <e36fb3c16a25449f93b9a9f267b2ed35>:0 
  at osu.Framework.Input.InputManager.<handleMouseClick>m__0 (osu.Framework.Graphics.Drawable target) [0x00012] in <e36fb3c16a25449f93b9a9f267b2ed35>:0 
  at System.Linq.Enumerable.Any[TSource] (System.Collections.Generic.IEnumerable`1[T] source, System.Func`2[T,TResult] predicate) [0x00035] in <63992662b765477a898ef49cdcc99ee2>:0 
  at osu.Framework.Input.InputManager.handleMouseClick (osu.Framework.Input.InputState state) [0x00000] in <e36fb3c16a25449f93b9a9f267b2ed35>:0 
  at osu.Framework.Input.InputManager.updateMouseEvents (osu.Framework.Input.InputState state) [0x0033c] in <e36fb3c16a25449f93b9a9f267b2ed35>:0 
  at osu.Framework.Input.InputManager.Update () [0x00185] in <e36fb3c16a25449f93b9a9f267b2ed35>:0 
  at osu.Framework.Graphics.Drawable.UpdateSubTree () [0x00060] in <e36fb3c16a25449f93b9a9f267b2ed35>:0 
  at osu.Framework.Graphics.Containers.Container`1[T].UpdateSubTree () [0x00000] in <e36fb3c16a25449f93b9a9f267b2ed35>:0 
  at osu.Framework.Graphics.Containers.Container`1[T].UpdateSubTree () [0x00051] in <e36fb3c16a25449f93b9a9f267b2ed35>:0 
  at osu.Framework.Platform.BasicGameHost.UpdateFrame () [0x00000] in <e36fb3c16a25449f93b9a9f267b2ed35>:0 
  at osu.Framework.Threading.GameThread.ProcessFrame () [0x00050] in <e36fb3c16a25449f93b9a9f267b2ed35>:0 
  at osu.Framework.Threading.GameThread.runWork () [0x00034] in <e36fb3c16a25449f93b9a9f267b2ed35>:0 
  at System.Threading.ThreadHelper.ThreadStart_Context (System.Object state) [0x00017] in <dca3b561b8ad4f9fb10141d81b39ff45>:0 
  at System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x0008d] in <dca3b561b8ad4f9fb10141d81b39ff45>:0 
  at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00000] in <dca3b561b8ad4f9fb10141d81b39ff45>:0 
  at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state) [0x00031] in <dca3b561b8ad4f9fb10141d81b39ff45>:0 
  at System.Threading.ThreadHelper.ThreadStart () [0x0000b] in <dca3b561b8ad4f9fb10141d81b39ff45>:0 
[ERROR] FATAL UNHANDLED EXCEPTION: System.NullReferenceException: Object reference not set to an instance of an object
  at osu.Game.Screens.Select.PlaySongSelect.start () [0x0001f] in <2a2d939806804702985a715d7ebaa5be>:0 
  at osu.Framework.Graphics.Containers.ClickableContainer.OnClick (osu.Framework.Input.InputState state) [0x0000d] in <e36fb3c16a25449f93b9a9f267b2ed35>:0 
  at osu.Framework.Graphics.UserInterface.Button.OnClick (osu.Framework.Input.InputState state) [0x0004f] in <e36fb3c16a25449f93b9a9f267b2ed35>:0 
  at osu.Framework.Graphics.Drawable.TriggerClick (osu.Framework.Input.InputState state) [0x00008] in <e36fb3c16a25449f93b9a9f267b2ed35>:0 
  at osu.Framework.Input.InputManager.<handleMouseClick>m__0 (osu.Framework.Graphics.Drawable target) [0x00012] in <e36fb3c16a25449f93b9a9f267b2ed35>:0 
  at System.Linq.Enumerable.Any[TSource] (System.Collections.Generic.IEnumerable`1[T] source, System.Func`2[T,TResult] predicate) [0x00035] in <63992662b765477a898ef49cdcc99ee2>:0 
  at osu.Framework.Input.InputManager.handleMouseClick (osu.Framework.Input.InputState state) [0x00000] in <e36fb3c16a25449f93b9a9f267b2ed35>:0 
  at osu.Framework.Input.InputManager.updateMouseEvents (osu.Framework.Input.InputState state) [0x0033c] in <e36fb3c16a25449f93b9a9f267b2ed35>:0 
  at osu.Framework.Input.InputManager.Update () [0x00185] in <e36fb3c16a25449f93b9a9f267b2ed35>:0 
  at osu.Framework.Graphics.Drawable.UpdateSubTree () [0x00060] in <e36fb3c16a25449f93b9a9f267b2ed35>:0 
  at osu.Framework.Graphics.Containers.Container`1[T].UpdateSubTree () [0x00000] in <e36fb3c16a25449f93b9a9f267b2ed35>:0 
  at osu.Framework.Graphics.Containers.Container`1[T].UpdateSubTree () [0x00051] in <e36fb3c16a25449f93b9a9f267b2ed35>:0 
  at osu.Framework.Platform.BasicGameHost.UpdateFrame () [0x00000] in <e36fb3c16a25449f93b9a9f267b2ed35>:0 
  at osu.Framework.Threading.GameThread.ProcessFrame () [0x00050] in <e36fb3c16a25449f93b9a9f267b2ed35>:0 
  at osu.Framework.Threading.GameThread.runWork () [0x00034] in <e36fb3c16a25449f93b9a9f267b2ed35>:0 
  at System.Threading.ThreadHelper.ThreadStart_Context (System.Object state) [0x00017] in <dca3b561b8ad4f9fb10141d81b39ff45>:0 
  at System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x0008d] in <dca3b561b8ad4f9fb10141d81b39ff45>:0 
  at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00000] in <dca3b561b8ad4f9fb10141d81b39ff45>:0 
  at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state) [0x00031] in <dca3b561b8ad4f9fb10141d81b39ff45>:0 
  at System.Threading.ThreadHelper.ThreadStart () [0x0000b] in <dca3b561b8ad4f9fb10141d81b39ff45>:0

Game detects physical keys, not actual keys

I have swapped my caps lock and escape keys use xmodmap. However when osu! is open, I must press my physical escape key (labelled "esc") rather than my actual escape key (labelled "caps lock") in order to invoke the functions of the escape key. This appears to happen with other bindings as well.

System details:

OS: Arch Linux 64-bit
uname: Linux 4.8.6-1-ARCH #1 SMP PREEMPT Mon Oct 31 18:51:30 CET 2016 x86_64 GNU/Linux
Xorg: 1.18.4
Mono: 4.6.1.3
Graphics driver: NVIDIA v375.10
OpenGL: NVIDIA libgl v375.10

Black Screen on Intel

When trying to run osu preview v6 build a black non-responding window appears.
I also have tried running from osu folder - nothing.
Hardware: Cheap Windows tablet with Intel Atom Z3735 (7-gen Intel HD Graphics).

No logs are created, nothing, just black screen...

game.ini saving bug

If the new value for any key contains less symbols, than the previous one - in the saved file you'll get the amount of new symbols, equals amount of missed symbols in the file

screenshot-346

Mac Window

Hey,

I already mentioned it in dev chat.
I'm currently writing a proper Mac app for osu!
I found out that Xamarin.Mac has no WindowsForm implementation and using MonoMac isn't
recommended (also it needs to be installed by the user and doesn't ship with the app package).

I would suggest writing a WindowsForm for Mac (Cocoa UI).
Also maybe we can resolve the graphical glitches this way on Mac too.

Mac supported .Net assemblies
https://developer.xamarin.com/guides/cross-platform/advanced/available-assemblies/

screen shot 2016-08-28 at 00 39 32

screen shot 2016-08-28 at 00 43 06

screen shot 2016-08-28 at 00 43 26

Font fallback

Currently the font face is hardcoded as Exo. But it rarely contains foreign characters like CJK glyphs, so we need font fallback system. My idea is:

  1. Find the glyph in Exo.
  2. If it is not found, we need to fallback to system fonts. Iterate over the fallback list until the glyph is found. Fallback list will be written in font priority order.
    • In Windows, maybe we can find appropriate font in the system fonts folder. Run System.Environment.GetFolderPath(System.Environment.SpecialFolder.Fonts) and get the folder path.
    • In Linux, we can either run fc-match or use fontconfig library directly.

Font fallback in Windows

We need font file name because we are using FreeType for text rendering. However, .NET Framework does not provide the file name of fonts. File names of the installed fonts can be found in the registry key HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts. In Windows without fontconfig, we should find the font file name in the registry. Maybe we can cache the font list at startup and use it.

Any feedback or suggestions are welcome.

Crash on exit, attempting to swap buffers when window is rip

Just because I was impatient, I decided to press the Windows X button after clicking Exit in game.

Turns out that crashes everything, and it looks like the game continues to try to swap the backbuffer after the window is closed. Just to say I tried to fix it, I used the ?. operator at the call site and the crash still happens, so it's internal to the window (since the issue isn't a null reference) and I haven't dug any farther.

I'm using Rider right now and don't know how to access useful info, but it's reproducible 100% of the time on my machine and it's really easy to do, so I'll just assume you can press two buttons one after the other (it's not like you're bad at osu!, right? you got this.)

If you can't make it happen, I'll pull it up in VS and get info out of it if I can.

Crash on BasicGameHost.cs line 253, calling SwapBuffers on Window

Black screen on launch, followed by crash

Hello there.
It seems there's an issue when opening the app, it just shows a black screen for a couple of seconds, followed by a crash.
I've also tried running in Admin Mode, same problem. The versions I've tried are v6 and v5.

Have a nice day!
EDIT: Yes, .NET 4.5 is installed

Crashing client in player mode

Something goes wrong, when you trying to press "z" or "x" in Player mode(in tests too). Debug shows me, what problem here.
screenshot-223

Volume level seems non-uniform.

Is it already controlling dB, or does it linearly scale with sound pressure? The latter would explain the perceived lack of uniformity.

Black screen on launch

I try to build osu!(branch:master) on Raspberry Pi use
xbuild osu\!.sln
It build success,but when I run it with
mono osu\!.exe
It just show me a black screen.
What should I do?I really want to play osu! on Pi,Thanks!

Environment:Raspberry Pi 2 with monodevelop

Stack overflow thrown during main menu loading

I've done a lot of digging to try and find the cause of the issue(which is certainly due to threading and may be different depending on hardware).

As far as I can tell, this seems to happen because the preloading of mainMenu takes differing amounts of time for different hardware. For example, increasing the delay before pushing mainMenu to 4800 solves this issue on my laptop, but on an older desktop I had to increase this to 6500. There is certainly a solution other than increasing the delay, but I'm uncertain of what it is.

I'm assuming the overflow itself is caused by recursive calls in osu.Game.GameModes.BackgroundMode.Push.

If I find anymore information while debugging, I'll put it below here

Music Controller

The music controller displays and controls the playback of the background music, attached to the lower right of the screen.

The music controller is accessible via clicking the music icon on the chatbar or the shortcut key.

Controller

The dimension of the box is 400*130 with 5px corner radius. Beatmap's background image is used for the background, center aligned, with 50% black overlay on top.

Song title (20px Exo 2 Medium Italics, followed by Artist name in the next line (12px Exo 2 Bold Italic).

The controller section is 50% black bar 50px high inclusive of 10px orange high progress bar occupying the bottom section. The middle controller buttons are Prev, Play/Pause and Next.

When skipping tracks, the background image slides left or right accordingly.

The hamburger button on the right displays the search function and playlist. Buttons goes orange when the playlist window is displayed.

Playlist

Song Search Box. The results are displayed in the playlist.

Collection List. Dropdown list that lists out player's song collection.

Playlist. Song Title (14px Exo 2 Regular, White), followed by Song Artist (12px Exo 2 Bold, #999). 10px indent for line breaks. Orange song title for current track.

Hamburger icon appears on hover, allows the track to be rearranged in the list by dragging the icon.

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.