Commit Graph

584 Commits

Author SHA1 Message Date
Jeffrey Han
f0858f657b Display time since achieving recent scores.
- Added history icon by Google: https://www.iconfinder.com/icons/326655/
- Draw history icon and elapsed time next to score buttons if they were achieved within 24 hours.  Conforming to osu! behavior, the elapsed time is not updated in real-time.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-29 03:05:09 -05:00
Jeffrey Han
0165abde56 Many quick bug fixes.
- Fixed bug when having "Sudden Death" and Easy "mods" enabled at the same time.  Additional "lives" are no longer granted.
- Fixed bug where GameMod active states weren't being reset upon restart.
- Fixed bug where GameMods were drawn as if inactive when viewing scores.  Alpha levels are now only set when drawing the button (i.e. calling GameMod.draw()).
- Moved large grade scaling into GameImage, and slightly padded the right side when drawing.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-29 01:50:26 -05:00
fd
0e9fd24754 Minor Fixes for beziers angles 2015-01-29 01:08:23 -05:00
Jeffrey Han
1ddeb3461d Moved ScoreData to separate file and renamed Scores to ScoreDB.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-29 00:56:30 -05:00
fd
07f6ef9479 Comments for previous commit 2015-01-29 00:37:25 -05:00
Jeffrey Han
2007058eb1 Quick fixes.
- Fixed a crash when closing the application in the ranking screen when viewing a score.
- Fixed a minor bug where OsuGroupList fields were not being erased upon restart.
- Dim the track volume by 50% when viewing a score.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-28 20:57:43 -05:00
Jeffrey Han
ce15f25ca1 Added score-viewing components to the song menu. [Completes 0bd72e7]
Added a scrollable score history area in the song menu.  Clicking on any score button will open the ranking screen.

Details:
- All drawing is performed by ScoreData.
- Store scores for the current focus node, and display up to "MAX_SCORE_BUTTONS" at a time; "startScore" is the starting index.
- When hovered over the score area, show scroll bar if needed.  When hovered over individual score buttons, change colors and show the rank.
- Scrolling with the mouse in the score area overrides song scrolling.
- Store scaled grade images as a Grade field.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-28 19:23:02 -05:00
Jeffrey Han
0bd72e731a Save game scores to an SQLite database. [Incomplete!]
Implemented basic features (mostly stable).  The remaining features are mostly graphical.
- Added package org.xerial.sqlite-jdbc.  All scores are saved to .opsu_scores.db on table `scores` after a game completes.
- Added "Scores" class to handle all game score data (including database connections).  The "Score" subclass encapsulates all database fields.
- Added "score viewing" constructor to GameData, for use only in the ranking screen.
- Draw the grade of the highest score next to expanded song buttons in the song menu.
- Added "bit" and "abbrev" fields to GameMod, used in storing/displaying scores.
- Hide the retry/exit buttons in the ranking screen when viewing a score.

Other changes:
- Removed "objectCount" field in GameData (no longer necessary).
- Removed "getID()" method in GameMod (no longer used).
- Moved most drawing in GameRanking state to GameData.
- Removed File parameter of "GameData.loadImages()" (leftover, no longer used).

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-28 03:47:24 -05:00
fd
33f2207881 CircumscribedCircle, LinearBezier Curves, multi repeats arrows,
CircleColorOrdering

fd
2015-01-28 00:30:51 -05:00
Jeffrey Han
f71b2c25f2 Quick fix: 'Esc' key not properly checked in splash screen.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-27 15:20:03 -05:00
Jeffrey Han
71edef2fa9 Fixed server socket being closed after a restart.
Prevents a bug where multiple program instances can be run.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-27 05:49:58 -05:00
Jeffrey Han
44bdf70c98 Renamed GameScore class to GameData.
Makes more sense, since the class is responsible for more than just the score.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-27 03:19:39 -05:00
Jeffrey Han
ef9e38bf2d Minor scorebar updates.
- Support loading scorebar-bg animations.
- Slight changes to scaling and positioning of scorebar-bg.  This still isn't quite correct (TODO).

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-25 18:36:54 -05:00
Jeffrey Han
0c1b86de62 Cursor updates.
- Supported loading beatmap-skinned cursors.
- Moved cursor loading into GameImage.
- Removed unnecessary scalings/rotations when drawing.
2015-01-24 22:23:49 -05:00
Jeffrey Han
d2b3249e2c Follow-up to 924f528: small fix.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-23 16:11:10 -05:00
Jeffrey Han
924f528881 Don't reset track to preview position unless game is complete.
(conforming to osu! behavior)

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-23 16:06:57 -05:00
Jeffrey Han
423866c222 Replaced GameScore.GRADE_* constants with an enum.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-22 15:12:15 -05:00
Jeffrey Han
c9e14bfc70 Comment format changes.
- Collapsed Javadoc comments for all fields.
- OsuFile now has proper Javadoc comments.
- Fixed various mistakes with comments.

Some changes with enums:
- Changed Class.values() calls to values().
- Changed size() calls to a SIZE field.
- Changed valuesReversed() calls to a VALUES_REVERSED field.
- Removed 'static' from enum declarations.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-22 00:44:45 -05:00
Jeffrey Han
d6c7476b88 Removed some unnecessary SlickException throwing/catching.
Mostly leftovers from moving Image creation to GameImage.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-21 18:56:53 -05:00
Jeffrey Han
e02cf60312 Added multi-image support to GameImage.
- Allows loading an undetermined number of files using a format string (e.g. combo bursts, slider balls).
- Fixes bug with those images not being properly reloaded.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-21 17:10:31 -05:00
Jeffrey Han
131c8a5637 Quick fix: lighting images weren't being reloaded properly.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-21 03:47:47 -05:00
Jeffrey Han
873d913424 Quick fix: prevent search from executing on beatmap reload.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-21 03:25:19 -05:00
Jeffrey Han
a48f8bd54d Implemented in-game beatmap reloading.
- Press F5 to reload beatmaps in the song menu (resets OsuGroupList, then invokes OSZ unpacker and OsuFile parser).
- Many components reused from Splash screen (progress display, 'Esc' interrupt).

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-21 01:38:02 -05:00
Jeffrey Han
19476993f9 Options state refactoring.
- Renamed Options state into OptionsMenu, and created Options class for solely handling user options.  Moved everything unrelated to the actual options menu into the static Options class.
- OptionsMenu no longer has static fields.
- Refactored option tabs into an enum, which makes the code much cleaner.

Also fixed a bug where global volume wasn't being used on container initialization.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-20 23:56:10 -05:00
Jeffrey Han
e2c1f2f937 Small memory optimization: reuse audio File objects in song groups.
Each song group references the same audio file probably 100% of the time, so don't create duplicate objects.

Also, follow-up to 3b13cc7: the up/down arrow keys now change global volume in the main menu and game states (in addition to the scroll wheel).

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-20 22:19:14 -05:00
Jeffrey Han
2bc45bec0a Follow-up to f98edf8: better checks for application restart.
- Fixes resource reloading when OsuGroupList is empty (i.e. if user has no beatmaps installed).
- OsuGroupList is no longer initialized with a class instance; OsuGroupList.create() is called by OsuParser.
- Also clear 'lastOsu' field in MusicController.reset().  Fixes theme song not playing on restart if it was the last track played (i.e. if no beatmaps installed).
- Call MusicController.reset() last so that more garbage is collected.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-20 19:24:59 -05:00
Jeffrey Han
f98edf8fc8 Enabled application restarts.
- Pressing Ctrl+Shift+F5 in the options menu restarts the game.  Beatmaps and sounds are not reloaded.
- Use GameContainer.setForceExit(false) to trigger a restart after exiting.

Other changes:
- Fixed general issues with track pausing/pause states.
- Store all background images loaded in OsuFiles in a static hash table, instead of in individual objects.  This allows easier access to the allocated memory.
- Only delete OSZ files if they were unzipped. (They were previously deleted in all cases.)
- Moved more images (mods, playfield, lighting) into GameImage.
- Moved OsuHitObject initialization inside Utils.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-20 19:01:18 -05:00
Jeffrey Han
3b13cc794b Implemented volume-bg and master volume setting.
- All sounds are now multiplied by a master volume setting.
- Changed all default volume levels.
- Scrolling in the main menu and game states changes the master volume and displays a volume bar on the right side of the screen.
- "volume-bg.png" image by @kouyang.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-20 14:52:02 -05:00
Jeffrey Han
f9c0794693 Save screenshots in a new thread.
Use BufferedImage/ImageIO instead of ImageOut (not threadable).

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-20 00:54:12 -05:00
Jeffrey Han
95775d8e73 Preload game images when program initializes.
Reverted earlier change to load images immediately before a game begins, since there is a noticeable lag in some cases.

Other changes:
- Added 'preload' field to GameImage.
- Changed 'gameImage' field in GameImage to 'skinnable' (more suitable name).

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-18 17:01:13 -05:00
Jeffrey Han
53158fd310 Interrupt OsuParser by pressing 'ESC' in Splash state.
Allows parsing only a subset of OsuFiles, in case parsing takes too long.

Other changes:
- Press 'ESC' three times to exit from the Splash state.
- Override Container.exit().
- Reset MusicController in closeRequested() to prevent an OpenAL error.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-18 15:26:00 -05:00
Jeffrey Han
ee17b20b25 Added wrapper around AppGameContainer to catch critical errors.
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>
2015-01-18 14:29:48 -05:00
Jeffrey Han
2f56bca9f7 Small GUI tweaks.
- FPS display is now much more subtle.
- A couple of main menu tweaks.

Other changes:
- Restore old alpha levels of Utils.COLOR_* constants when modifying them.
- Utils.loadFont() can load any font effect, not just a ColorEffect.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-18 12:39:30 -05:00
Jeffrey Han
d92e67e5f1 More quick fixes.
- Minor typo in ErrorHandler.
- Prevent more than one music control button in the main menu from being hovered over at once.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-17 00:44:23 -05:00
Jeffrey Han
f5df00255f Moved track volume dimming into MusicController.
- Fixes an issue where the first few milliseconds of the theme song would always play at full volume, even if container is not focused.
- Allows easier application to any song.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-16 16:02:02 -05:00
Jeffrey Han
31a97fbc5d Minor graphical updates and code cleaning.
- 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>
2015-01-16 15:44:13 -05:00
Jeffrey Han
be1ec64f28 Eliminated unneeded calls to Graphics.setColor().
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>
2015-01-16 14:46:45 -05:00
Jeffrey Han
816c9bb659 Quick bug fixes.
- Checkpoint loading now works again. (blame: 9e69afa)
- Forgot to check for VSync when application initializes. (blame: 97f3aad)
- Also clear game data after finishing a checkpoint game.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-16 14:10:42 -05:00
Jeffrey Han
09a5979475 Added a button to link to GitHub repository in main menu.
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>
2015-01-16 13:42:54 -05:00
Jeffrey Han
b54eb95747 Updated copyright notices for 2015.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-16 12:05:44 -05:00
Jeffrey Han
7bd9eba2f5 Added HitObject interface for OsuHitObjects during gameplay.
This greatly simplifies object-handling code, and is slightly more time and memory efficient.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-16 03:47:37 -05:00
Jeffrey Han
bcf1fa301a Implemented mod shortcut keys in options menu.
See for details: http://osu.ppy.sh/wiki/Shortcut_Key_Reference#Mods_screen

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-16 02:26:13 -05:00
Jeffrey Han
38b3621c29 Implemented Ctrl+Enter in song menu (play with "auto" mod).
Also made 'Esc' during gameplay return to the song menu immediately if the "auto" mod is active.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-16 02:00:42 -05:00
Jeffrey Han
78aabaa43e Implemented Shift+F2 in song menu (undo random map).
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-16 01:40:34 -05:00
Jeffrey Han
90c10d21da Follow-up to 516e628: Fix resetting game data too soon.
Instead of resetting immediately, set a variable in SongMenu to reset data when entering the state.  Fixes some weird behaviors, and also allows resetting in more scenarios.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-16 00:36:05 -05:00
Jeffrey Han
553f091693 Added ErrorHandler class to handle all critical errors.
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>
2015-01-15 21:55:26 -05:00
Jeffrey Han
f8dad2889f Added support for multiple GameImage file extensions.
Specifically, the main menu background and pause/fail backgrounds now accept JPGs as well as PNGs.

Other changes:
- Don't draw the default pause/fail background if the buttons are skinned and the background is unskinned.
- Preload logo and main menu background.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-15 18:16:46 -05:00
Jeffrey Han
516e6280c7 Call System.gc() on track changes and game resets.
This causes a noticeable drop in memory usage in most cases.

Also renamed the "crash" popup since the game doesn't necessarily crash.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-15 16:47:55 -05:00
Jeffrey Han
9db9c2f3ad Add more options to crash popup.
Options: "Send Report" (opens GitHub issues and log file), "View Error Log" (opens log file), "Close" (does nothing).

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-15 04:16:20 -05:00
Jeffrey Han
09d96f3f08 Automatically open the log file when opsu! crashes.
- Sends a JOptionPane message dialogue if java.awt.Desktop is supported.

Other changes:
- Updated natives directory, and set the LWJGL library path if it exists.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-15 02:47:48 -05:00
Jeffrey Han
97f3aad772 Enable VSync when target FPS is 60.
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>
2015-01-15 01:52:16 -05:00
Jeffrey Han
b856e2924c Minor updates and code improvements.
- MusicController.getPosition() now returns time even when track is paused. (e.g. song progress bar in main menu won't reset when paused)
- Force unpause track when entering the song menu.
- Rewrote Game.RESTART_* constants as enums.
- Cleaned up logo play/exit button scaling.
- MainMenu.previous is now non-static.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-15 00:56:30 -05:00
Jeffrey Han
03095733df Removed static fields in Game state.
Mostly merged from #8 (72e8a7e).

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-14 23:57:50 -05:00
Jeffrey Han
64d961a8f9 Only load image resources when needed.
- Stop loading all images on startup.
- Game images are preloaded before the song starts.
- Destroy skin images immediately after finishing a beatmap, potentially saving lots of memory.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-14 23:10:19 -05:00
Jeffrey Han
05a671e627 Quick fix for countdown displays. (blame: 9e69afa)
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-14 22:31:48 -05:00
Jeffrey Han
dfeb981361 Some memory optimizations.
- 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>
2015-01-14 21:48:24 -05:00
Jeffrey Han
62b7ecd648 Fixed a small bug with hovering over song buttons.
The left/right arrow keys no longer reset hover data if the start node hasn't changed.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-13 23:00:09 -05:00
Jeffrey Han
4152af4977 Made OsuGroupList a singleton.
(This makes a lot more sense than storing the single pointer in Opsu.groups.)

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-11 14:17:33 -05:00
Jeffrey Han
af8512c080 Moved scattered GameOption code into the enum. 2015-01-11 13:05:32 -05:00
Jeffrey Han
6f7b2b6554 Moved score multiplier field into GameMod enum.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-11 00:29:26 -05:00
Jeffrey Han
5a09689b4c Added mouse hover effects for tabs.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-10 23:14:22 -05:00
Jeffrey Han
6e434e9709 Improved appearance of tabs.
- 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>
2015-01-10 22:49:23 -05:00
Jeffrey Han
1e59819f3a Dim theme song volume when window is not focused.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-10 20:14:39 -05:00
Jeffrey Han
ab0d3d1528 Added mouse hover effects for song buttons in song menu.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-08 16:28:49 -05:00
Jeffrey Han
db4ca5f1d5 Minor optimizations.
- 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>
2015-01-08 12:03:39 -05:00
Jeffrey Han
f6eac71643 Moved most Image creation into GameImage enum.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-07 23:45:21 -05:00
Jeffrey Han
8671718ce3 Moved most GameImage scaling/processing to a single file.
- 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>
2015-01-07 22:36:39 -05:00
Jeffrey Han
1e806bc9c6 SoundController refactoring.
- 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>
2015-01-07 19:29:51 -05:00
Jeffrey Han
3127571886 Smoother health bar changes.
Also merged GameScore update calls into a single method.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2014-12-30 01:17:05 -05:00
Jeffrey Han
b0649541eb Better emulation of main menu behavior.
- 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>
2014-12-30 00:41:32 -05:00
Jeffrey Han
2592faec44 Renamed GUIMenuButton class to MenuButton.
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>
2014-12-30 00:00:58 -05:00
Jeffrey Han
9e69afac91 Added retry counter.
Display number of retries (after retrying at least twice).

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2014-12-29 23:35:31 -05:00
Jeffrey Han
cc84d4a3e4 Subtle fade in effect for circles and sliders. (#9)
Also resize the "skip" button on hover. (follow-up 33f5df0)

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2014-12-24 02:45:43 -05:00
Jeffrey Han
068a844e1f Fixed music player issues with handling repeat tracks.
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>
2014-12-24 00:25:26 -05:00
Jeffrey Han
33f5df030c Expand menu buttons when hovering.
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>
2014-12-23 23:41:37 -05:00
Jeffrey Han
ce8ae40f79 Quick follow-up to #10.
Don't play a sound upon exiting.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2014-12-21 23:20:17 -05:00
Raymonf
4b17f28cf2 Undo offset 2014-12-21 17:11:31 -05:00
Raymonf
068b40a86a Mimic osu! exit button
On osu!, clicking the exit button closes the game after clicking. Pressing ESC on osu! brings up the exit menu.
2014-12-21 17:02:11 -05:00
Raymonf
bc7d19295b Make default offset 0ms 2014-12-21 16:46:11 -05:00
Jeffrey Han
5083229572 Fixed theme song loading in JAR files. (follow-up ce0eccd)
Removed theme.osu, replaced with a comma-deliminated line in the configuration file.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2014-12-20 21:35:18 -05:00
Jeffrey Han
ce0eccd32b Implemented skinnable theme songs.
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>
2014-12-20 18:17:04 -05:00
Jeffrey Han
9d3a12ad9c Display checkpoint time on game screen after loading.
Also fixed some indentation issues.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2014-12-20 15:30:20 -05:00
Jeffrey Han
47cf4f4af3 Fix hidden mouse cursor.
Cursor is now properly hidden, instead of being a single black pixel.  Credits to davedes.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2014-12-20 15:10:46 -05:00
Jeffrey Han
51b50843e5 Added "Kochi Gothic" font.
- Provides cross-platform CJK support. (follow-up to 904a54d)

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2014-08-25 12:47:10 -04:00
Jeffrey Han
904a54df26 Added support for Unicode (non-English) metadata.
- 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>
2014-08-24 23:48:52 -04:00
Jeffrey Han
9a94c03b4e Use UnicodeFont instead of TrueTypeFont.
- Fixes issue #4.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2014-08-24 14:48:27 -04:00
Jeffrey Han
83e486054f Catch (nearly) all exceptions thrown by OsuParser.
- 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>
2014-07-24 13:38:59 -04:00
Jeffrey Han
39dcdf6dee Reorganized libs.
- All libraries are now packed as JARs, with sources and docs also packed and separated.
- Added .classpath and .project to version control.
- Updated ant build script.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2014-07-20 13:21:13 -04:00
Jeffrey Han
ddcbed20b2 Added error message when running JAR in path containing '!'. (issue #5)
- See: http://bugs.java.com/view_bug.do?bug_id=4523159

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2014-07-19 13:01:23 -04:00
Jeffrey Han
fe293827e6 More small bug fixes.
- 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>
2014-07-19 03:31:54 -04:00
Jeffrey Han
834682a6ca Minor bug fixes.
- 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>
2014-07-18 21:33:07 -04:00
Jeffrey Han
c0870afb77 Fixed issue where slider end distance calculations ignored repeats.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2014-07-18 21:13:17 -04:00
Jeffrey Han
64788b2832 Song sort refactoring.
- Created "SongSort" enum to handle everything related to sorting OsuGroupNode objects.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2014-07-18 20:33:41 -04:00
Jeffrey Han
717605564d Hit object refactoring.
- 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>
2014-07-18 15:11:57 -04:00
Jeffrey Han
2380b11f48 Screenshot directory is now configurable. (requested in #4)
- Directory must already exist if a non-default location is used.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2014-07-18 00:56:37 -04:00
Jeffrey Han
edf40e11fd Added configurable game key bindings.
- 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>
2014-07-17 23:58:37 -04:00
Jeffrey Han
b0c0b44ef1 Major track length-related updates.
- 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>
2014-07-17 21:16:15 -04:00
Jeffrey Han
4ecd50f488 Added support for conditional search expressions.
- Pattern: {type}{operator}{value}
-- Types: ar, cs, od, hp, bpm (length not yet implemented)
-- Operators: =/==, >, >=, <, <=

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2014-07-17 12:49:12 -04:00
Jeffrey Han
0a5e7f66ec Improved search feature.
- Search is now more like osu!, where subsequent search terms limit the existing result list (as opposed to further expanding it).
- Replaced global tag HashMap with String instance variables, since the previous implementation is incompatible with the above change (resulting in slightly higher memory usage and search times).

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2014-07-17 01:00:28 -04:00
Jeffrey Han
cb396e0d20 Added "Easy" mod.
- 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>
2014-07-16 16:56:23 -04:00
Jeffrey Han
7a187c4e4f Game mod refactoring.
- Created "GameMod" enum to handle all mod-related actions and store all related data.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2014-07-16 16:01:36 -04:00
Jeffrey Han
d5b7ff3516 Small visual tweaks.
- 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>
2014-07-15 13:21:37 -04:00
Jeffrey Han
943c2af178 Resolved some reported issues.
- 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>
2014-07-15 00:20:36 -04:00
Raymonf
f70f993999 Logo click changes on Main Menu
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).
2014-07-13 17:53:56 +02:00
Jeffrey Han
5aa9620834 Added option to disable sound effects from loading. (partially resolves issue #1)
- 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>
2014-07-10 22:01:39 -04:00
Jeffrey Han
842563c6a5 Resolution improvements.
- 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>
2014-07-10 20:35:07 -04:00
Jeffrey Han
95f969f62f Major song menu improvements and fixes.
- 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>
2014-07-10 19:13:53 -04:00
Jeffrey Han
5a1972a2bd Some code cleanup.
- 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>
2014-07-09 13:36:42 -04:00
Jeffrey Han
50fb71e353 Implemented saving/loading from checkpoints.
- 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>
2014-07-08 22:17:48 -04:00
Jeffrey Han
2ed8e66bbf Minor search feature fixes.
- 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>
2014-07-08 19:03:43 -04:00
Jeffrey Han
e7f74d8dd6 Added loading progress for sound files in splash screen.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2014-07-08 14:08:06 -04:00
Jeffrey Han
331f374a5b Better positioning of mod icons and song menu header text.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2014-07-08 13:38:16 -04:00
Jeffrey Han
83c475cdc1 Java Sound crash fixes for Linux. (issue #1)
- Explicitly supply the AudioFormat when creating a Clip.
- Disable Master Gain if unsupported (e.g. in PulseAudio).
- Do not try to play uninitialized sounds (e.g. LineUnavailableException during creation, seems to happen regularly with PulseAudio).

Other changes:
- Errors replaced with debugs in 'getTrackLength()' if audio fields inaccessible.
- Do not log ThreadDeath exceptions (it's a known issue, and only clutters the log file).

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2014-07-08 00:42:50 -04:00
Jeffrey Han
a9cc7a3deb Scale and rotate the cursor.
- 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>
2014-07-06 23:13:33 -04:00
Jeffrey Han
6d3c333a3f Minor follow-up to d9c251e.
- Added 'zip4j' library to ant build script.

Other changes:
- Added 'esc' hotkey to exit from splash screen.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2014-07-06 02:27:53 -04:00
Jeffrey Han
d9c251ef82 Added a module for unpacking OSZ archives.
- 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>
2014-07-06 01:58:44 -04:00
Jeffrey Han
dea7e942a3 Created a splash screen state for loading resources.
- 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>
2014-07-05 21:00:52 -04:00
Jeffrey Han
0dbfd18c5f Added a few missing keyboard shortcuts.
- Main Menu: "P" (play), "Q" (quit)
- Game: Ctrl + "R" (restart)

Other changes:
- Song Menu search textfield no longer retains focus in different states.
2014-07-05 14:29:48 -04:00
Jeffrey Han
83f13a8879 Added options for global fixed difficulty settings (CS, HP, AR, OD).
- 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>
2014-07-05 01:24:01 -04:00
Jeffrey Han
06f8dae037 Reduced unnecessary reloading of default images. (follow-up 16afcaf)
- GameImage now stores both a default image and skin image, returning the skin image whenever available.
- Default images are loaded once on startup, instead of before every game.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2014-07-04 19:59:57 -04:00
Jeffrey Han
16afcaf3e6 Added initial support for loading beatmap skins.
- 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>
2014-07-04 16:41:52 -04:00
Jeffrey Han
c72b9b955a Quick fix for parsing invalid *.osu files.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2014-07-03 18:50:44 -04:00
Jeffrey Han
0b471fa1cc Animated the score display.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2014-07-03 02:03:56 -04:00
Jeffrey Han
f195ffb861 Added support for default playfield image and an override option.
- 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>
2014-07-03 01:05:23 -04:00
Jeffrey Han
03be29307f Misc. bug fixes and improvements.
- 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>
2014-07-02 23:38:30 -04:00
Jeffrey Han
2c2f28b441 Game options overhaul & new options.
- 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>
2014-07-02 18:24:19 -04:00
Jeffrey Han
812b83af45 Added extra checks in the parser for invalid line.
Credits to xasuma for the report.
2014-07-02 10:14:15 -04:00
Jeffrey Han
56123363b3 Implemented dynamic main menu backgrounds.
- 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>
2014-07-02 03:02:11 -04:00
Jeffrey Han
bcd0c23961 Added initial support for loading user skins.
- "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>
2014-07-02 01:53:42 -04:00
Jeffrey Han
ab487c5e80 Replaced native cursors with skinnable ones.
- 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>
2014-07-01 19:32:03 -04:00
Jeffrey Han
0604a25822 Added initial sound effect support.
- 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>
2014-07-01 01:14:03 -04:00
Jeffrey Han
60eaa42997 Only allow a single program instance to be run.
Creates a ServerSocket instance on a port (default: 49250).
Credits to marcostudios for the suggestion.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2014-06-30 12:37:37 -04:00
Jeffrey Han
6bdb026447 Added support for floating-point difficulty values (v13).
Thanks to Marcin for the info and FieryLight for the report.
2014-06-30 04:03:39 -04:00
Jeffrey Han
9da166f60f Initial commit. 2014-06-29 22:17:04 -04:00