1. osu! forums
  2. osu!
  3. Development

Site: http://itdelatrisu.github.io/opsu/
Releases: https://github.com/itdelatrisu/opsu/releases/

opsu! is an unofficial osu! client written in Java using Slick2D and LWJGL, wrappers around the OpenGL and OpenAL libraries. The only requirement to run opsu! is a Java Runtime Environment (JRE), so it's cross-platform compatible (tested on Windows, OS X, and Ubuntu). fluddokt has also ported the project to LibGDX, so opsu! will also run on Android (and theoretically iOS, but that's untested). More details can be found on the opsu! web page or the GitHub readme page.

If you've installed osu! in the default program folder, opsu! will run from anywhere: just execute opsu-{version}.jar and you're set. Otherwise, you can either set the paths manually in the configuration file (.opsu.cfg, generated when the program starts) or run opsu! from the working directory. There's a built-in beatmap downloader, and any OSZ archives placed in the SongPacks directory will be automatically unpacked.

Game options can be accessed by clicking the "Other Options" button in the song menu. You'll likely need to change the "Music Offset" value if hit objects are out of sync (this might involve a bit of playing around -- it's a known issue, sorry!).

Project Goals & Contributing
Update: This project has reached a relatively stable point, thanks to all the user contributions I've received -- please keep sending them in! If you have any interest in the project, feel free to contact me by opening an Issue on GitHub, and I'd love to hear your thoughts.

The majority of images included in opsu! are taken from user-released skins, and their names are listed in the credits file in the repository. I also referenced the Wojtkosu and osu! web projects when writing portions of the code. fluddokt also contributed significantly to the project. Lastly, I want to thank peppy for allowing me to share this here.

See this page.

This software is licensed under GNU GPL version 3. You are free to change and redistribute it, but only under the terms of the license. The full text can be found here.
Pretty amazing work! A lot more polished than I expected for a first release. Some issues that stood out the most!

- The cursor looks kinda sloppy, like someone drew a halfhearted circle in MS Paint. Perhaps grab one from an existing skin?
- Are hitsounds implemented? It's pretty jarring to play without the instant feedback they provide
- The bursts are really distracting -- they look just like approach circles, and stay on the screen for far too long, cluttering it up imo

In terms of directions to take this project: instead of aiming for feature parity with osu!, perhaps aim to fill in the niches? That is to say, experimental features that the current dev team isn't interested in exploring. For example, a hold slider, or a global approach rate? A good source (well, more like a firehose) of suggestions would be from the Feature Requests forum.

Anyways, I'm excited to see where this project goes! Java is near and dear to my heart; I might be interested in contributing when I find the time :)
Thanks for the feedback!
  1. Hardware cursors seemed really buggy in Slick2D when I tried earlier, but I'll give it another shot when I have time.
  2. I personally never played using hitsounds, so that was at the bottom of my to-do list XD. It's the next thing I'll look at, so I'll hopefully have those implemented soon.
  3. You can disable the (lighting) bursts in the options, or swap them out with something else in the jar. I'm hoping to eventually support skinning (at least partially), but there's no way to override the default resources yet without physically replacing them in the jar (which isn't hard to do, but annoying).

Also, feel free to create issues in the repository; it'll be easier to stay organized that way.
Hmm, I can't seem to be able to open the .jar at all. Nothing pops up when I try to open it (though the .cfg and .log are created). I don't think it's Java because OsuStreamSpeed.jar works fine for me. Windows 7 here if that matters.
Is there any error message in the log? (This is a total guess, but if you're running Java 6, the supplied jar won't run since it's built using JDK 7.)
Version 7 Update 55.

My log says:

Sun Jun 29 23:28:52 PDT 2014 ERROR:** Uncaught Exception! **
Sun Jun 29 23:28:52 PDT 2014 ERROR:For input string: "8.3"
java.lang.NumberFormatException: For input string: "8.3"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Byte.parseByte(Unknown Source)
at java.lang.Byte.parseByte(Unknown Source)
at itdelatrisu.opsu.OsuParser.parseFile(OsuParser.java:263)
at itdelatrisu.opsu.OsuParser.parseAllFiles(OsuParser.java:85)
at itdelatrisu.opsu.Opsu.main(Opsu.java:118)
Can't open if i pasted on my osu! folder
Mon Jun 30 09:35:40 CEST 2014 ERROR:Unable to determine Slick build number
Mon Jun 30 09:35:40 CEST 2014 ERROR:Resource not found: icon16.png
java.lang.RuntimeException: Resource not found: icon16.png
at org.newdawn.slick.util.ResourceLoader.getResourceAsStream(ResourceLoader.java:69)
at org.newdawn.slick.AppGameContainer.setIcons(AppGameContainer.java:527)
at itdelatrisu.opsu.Opsu.main(Opsu.java:115)
Mon Jun 30 09:35:40 CEST 2014 ERROR:Error while creating game container.
Mon Jun 30 09:35:40 CEST 2014 ERROR:Failed to set the icon
org.newdawn.slick.SlickException: Failed to set the icon
at org.newdawn.slick.AppGameContainer.setIcons(AppGameContainer.java:530)
at itdelatrisu.opsu.Opsu.main(Opsu.java:115)
Ah, okay. x_x That's an error with the parser; seems like someone mapped a floating point value for OverallDifficulty, which is documented as an integer (so osu! either supports floats or rounds them... it didn't come up in my ~1000 local maps). I'll push a fix for that soon. For now, if you just want to try the app, change the songs directory in the configuration file and copy a couple of maps into that new location. Sorry for the inconvenience.

Honestly, I'm not sure why that happens--perhaps someone who's worked with Java's class loader can say more about it. All the machines I've tested on seemed to read resources within the jar... maybe you can try extracting all the images (.png and .jpg) from the root of the jar, which is messy but should definitely work.
Float support was added in v13 version of .osu file.

Marcin wrote:

Float support was added in v13 version of .osu file.
Thanks for the info. That's for all difficulty fields, then?
Yes, all difficultiy settings

euphyy wrote:

Honestly, I'm not sure why that happens--perhaps someone who's worked with Java's class loader can say more about it. All the machines I've tested on seemed to read resources within the jar... maybe you can try extracting all the images (.png and .jpg) from the root of the jar, which is messy but should definitely work.
I forgot to say this happens when i insert opu.jar in my osu! folder but when it has his folder outside osu! it works
this. is. gold.
Oh wow, it just works! Great start!

Hope to see more features in the future :D
hm, saw now that track loading at the beginning really takes a lot of time, expecially for some marathon songs, and that's a pain. Also, played a bit with the files into the jar with winrar to make some sort of similiar to my skin, and also played some maps, I have to say a few things:
- Would be great to have a more effecient "slider loader". That's just a little note. Because I noticed that some sliders go really crazy with the velocity.
- The cursor is rendered pretty badly. From what I saw, it's rendered by changing the cursor of the machine with the cursor in the jar file. Please avoid that. Instead try making an image under the cursor, the cursor of the machine not displayed on the window of opsu! so the cursor can be displayed more well. Of course, this is just a suggestion, If this isn't possible in java, don't mind this point :P
Also can you do like killing a second opsu if wrongly opened? my ram was full because of that :<
I implemented sound effects today, and also limited the program to a single instance. You'll need an accurate Music Offset for the hit sounds to be in sync. I'm currently experimenting with cursors, and will probably push an update tomorrow.
Wow, this is very impressive, indeed.
oh nice... but need a lot of work, :P
show more
Please sign in to reply.