- 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>
- Only retrieve song information String[] when needed.
- Don't try to load glyphs if Unicode metadata is disabled.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
- To scale an image, override process_sub() in its enum definition. All GameImages call the process() method when loaded.
- Skin GameImage overrides will now call process() immediately, so there's no more need for the hackish scaling status.
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>
- Pressing 'Esc' will now always enter the MainMenuExit state.
- Returning from MainMenuExit state does not reset button states: these must be manually reset by calling the reset() method.
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>
When pressing the "next" button, songs will only be pushed when a new track plays. Fixes a potential null pointer crash.
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>
- Properly handle bad input and log a warning. The game may run with some gameplay errors (ex. if no base TimingPoint is parsed), but it should not crash.
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>
- Moved the bulk of hit object parsing into the OsuHitObject constructor, and made all fields private. Only combo-related data is still set by OsuParser.
- Added 'isCircle()', 'isSlider()', 'isSpinner()', and 'isNewCombo()' methods for convenience.
Other changes:
- Fixed difficulty overrides are no longer affected by game mods.
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>
- Parse and store the end time for every beatmap (i.e. end time of last hit object).
- Added a 'length' sorting tab.
- Added 'length' search condition.
- Removed 'getTrackLength()' and 'getTrackLengthString()' methods, as they are no longer needed.
- Added a loader spritesheet animation to render during MP3 conversions (in place of track length rendering upon completion).
Other changes:
- Added a yellow progress circle during lead-in time.
- Fixed sorting tab positioning.
- Slightly increased button animation speed in "Main Menu Exit" state.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
- Halves all difficulty values and grants 3 "lives" instead of 1, with a score multiplier of 0.5x.
Other changes:
- Fixed score display in game state if score exceeds 8 digits.
- Added a "HP_DRAIN_MULTIPLIER" constant for steady HP drain/increase (to replace numeric constants).
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>
Makes clicking the logo more similar to the real osu! game, where the Play options show when you click the logo the second time (after it was clicked first).
- 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>
- Song group nodes are now hidden when the group is expanded.
- Setting a new focus will always move the focus into view.
- Left and right arrow keys now shift focus by exactly 1 node.
- Render the version string for unexpanded song group nodes containing only 1 beatmap.
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>
- Search textfield now properly retains focus in song selection menu.
- Clearing an invalid search no longer changes the current song.
Other changes:
- Fixed skip image not being resized correctly.
- Added menuclick sounds when selecting a new song.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>