Critical game errors (detected in Game.updateAndRender()) are now passed through ErrorHandler. Note that the actual exception is not displayed in the ErrorHandler window, only the log.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
- Padded game score display, and always display 2 digits in front of the decimal (e.g. 00.00% instead of 0.00%).
- Keep map progress circle at a fixed location instead of basing it off the score length.
- Moved some track resets (pause + restart at preview) to trigger upon loading the song menu. Fixes weird behaviors when leaving the game state.
- Cleaned up trailing whitespace and added missing overrides.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
The method creates a new Color object each call, so set color in UnicodeFont.drawString() instead.
Also slightly padded the song information text.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
GitHub "mark" image is from: https://github.com/logos
Also changed default screen resolution to 1024x768 since it's more likely to be supported.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
This mostly replaces the Slick2D Log class for error reporting. Most game errors will now trigger the error popup.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
Other changes:
- Write actual resolution and FPS values to config file instead of array indexes.
- Rewrote resolutions[][] array as an enum.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
- Load all OsuFile String objects into a hash table while parsing, to eliminate duplicate strings.
- Trim all ArrayList objects in OsuFiles.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
- Replaced 'selection-tab.png' with a new image (by @kouyang).
- Simulate osu! color scheme (tab color/font color changes instead of alpha changes for selected tab).
- Added Utils.drawTab() method to avoid code duplication for Option menu tabs.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
- Added enum classes SoundEffect and HitSound.
- Added a SoundComponent interface for sound effects and hit sounds, and extended playSound() and playHitSound() methods to play any SoundComponent.
- Moved features related to sample sets to the HitSound class, and rewrote sample sets as an internal enum class.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
The class was originally named with the intent of adding many other GUI classes, but this never happened.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
Added hovering capabilities to GUIMenuButton. The max scale and direction to expand the image can be modified per object.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
Plays a theme song when opsu! starts (can be disabled in options). The default song is "welcome to osu!" by nekodex, uploaded by CyberKitsune.
To change the song, place a new "theme.osu" in the skins folder and edit the file name, metadata, and song length (at minimum).
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
- Setting is off by default, and can be switched on in the options menu.
- Changed default font to "Arial Unicode MS" (CJK), with fallback to "Lucida Sans Console" (non-CJK). Cross-platform support may be added later.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
- Always use '.' as decimal separator in options file, regardless of locale.
- Properly handle bad input when initially parsing hit objects.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
- Fixed null pointer in "Main Menu" state if no tracks loaded. (since b0c0b44)
- Fixed "keyOsuLeft" and "keyOsuRight" writing KEY_NONE to configuration file on first run (instead of default values).
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
- Game keys (default Z/X) can be changed to any letter or digit in the options screen.
Other changes:
- Mouse/keyboard input in the "Game Paused Menu" state is now the same as in the game state (i.e. all game keys available).
- Moved 'isInputKeyPressed()' into "Utils" class ("Game" state didn't even call it).
- Trimmed 'failsound.wav'.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
- Modified "LoadVerbose" option so that 'false' will display a progress bar (instead of nothing at all), and made this the default.
- Slowed down a few shifting animations.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
- Threaded OGG loading (in addition to MP3) to eliminate delays in song select menu. (reported by xasuma)
- Changed default OSZ unpacking location to a "SongPacks" directory to prevent unintended unpacking. (reported by Lanturn)
- Fixed a null pointer for a corner case in 'getRandomNode()'. (reported by @iceblade112)
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
- By default, sound effects will be disabled on Linux due to driver issues.
Other changes:
- Minor corner-case fix in song selection. (since 95f969f)
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
- Players can no longer set a container size larger than the screen dimensions.
- If the game resolution is equal to the screen size, the created window will be borderless.
- Added some additional resolutions.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
- Overhauled OsuTimingPoint class: parsing is done in the constructor, and fields are no longer public.
- Improved consistency of static/non-static fields in a couple of classes.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
- A checkpoint (track position) can be set in the options screen, and also while playing by pressing "CTRL+S".
- A checkpoint can be loaded by pressing "CTRL+L" while playing. This will reset all game data and begin from the checkpoint time; the ranking screen will be skipped upon song completion.
Other changes:
- Don't draw grade if no objects have been processed (previously defaulted to GRADE_D).
- Calculate slider start/end angles based on a step difference (previously an arbitrary 0.01 difference).
- Always end a slider curve base on the last control point.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
- Cursor is now scaled based on window size.
- Cursor now rotates slowly (new style only).
- Cursor now expands upon mouse press.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
- Included 'zip4j' library to extract the ZIP archives. (Homepage: http://www.lingala.net/zip4j/)
- OSZ files are unpacked from the root directory by default, and the path can be changed in the configuration file.
Other changes:
- Fixed a critical issue in splash screen where thread would running before other states loaded. (blame: dea7e94)
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
- Game now boots to splash screen, which displays parser progress.
- Added option "LoadVerbose" to disable rendering the progress text.
- Main Menu backgrounds now fade in regardless of DynamicBackground setting (as a transition from the splash screen).
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
- Added a new tab in Game Options screen containing the values.
Other changes:
- Corrected "Hard Rock" difficulty modifiers.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
- Added a GameImage enum for more organized loading of image resources.
- Game image loading now takes place directly before each beatmap is loaded.
- Added option 'IGNORE_BEATMAP_SKINS' to disable this feature.
Other changes:
- Slight correction in readme file: apparently the JAR will not run in the osu! program folder.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
- Credits: https://osu.ppy.sh/forum/t/198483 (image by Xiaounlimited)
Other changes:
- Added "Unranked" text image, currently displayed for "Auto" mod plays only (image by XinCrin).
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
- Fixed Game not loading OsuFile for maps in a song group. (blame: 5612336)
- Implemented rotations for reverse arrows, and added a new one by Alic1a.
- "Auto" mod: pausing no longer requires click to unpause, and mod images are permanently drawn.
- Program now loads from Main Menu instead of Options (unnecessary complications for the sake of a transition).
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
- Separated options into "Display", "Music", and "Gameplay" tabs.
- New options: VolumeHitSound, DimLevel, PerfectHit
- Added options that were previously missing from Game Options screen.
- Added sounds to Game Options screen.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
- This can be switched off in the configuration file.
- Credits: https://osu.ppy.sh/forum/t/98954
Other changes:
- Removed OsuFile setters/getters from Game state, replaced with a 'getOsuFile()' method in MusicController (a more logical location).
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
- "Skins" directory is created in the root folder, and reads files directly from there (for now). NOT ALL FILES ARE SUPPORTED.
- To change the path (e.g. to an installed skin), edit the path in the configuration file.
Other changes:
- Renamed some files: directories now begin with a capital letter (to match osu! naming), and '.osu_tmp' renamed to '.opsu_tmp'.
- Disabled mouse grabbing, as this does not seem to work properly for touchscreen devices. (partial revert of ab487c5)
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
- Added support for both the new (2013+) and old cursor styles. These can be toggled on/off in the configuration file.
- Added cursor images by XinCrin (old style) and teinecthel (new style).
Other changes:
- Refactoring: Created a "Utils" module, containing methods and constants that didn't belong in the "Options" state and some duplicated drawing methods.
- Mouse is now grabbed during gameplay.
- Removed 'optionsChanged' switch, simplifying adding new options.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
- Added SoundController module, which uses Java Sound since OpenAL has a slight delay on playing sounds.
- Uploaded all effect WAVs. (credits: WWWskin, AL's IA, Fantasy's Skin, Minimalist Miku)
- Added a missing entry in credits.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
Creates a ServerSocket instance on a port (default: 49250).
Credits to marcostudios for the suggestion.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>