This project reproduces the major gameplay experience of the desktop rhythm game (oto-game) [osu!](https://osu.ppy.sh) on the DE2-115 FPGA development board. The user plays the game using a pointing device such as a USB mouse and a keyboard device such as a PS/2 keyboard. The graphics will be displayed using a VGA-capable monitor. It supports all the fundamental gameplay elements, including hit-circles, sliders, spinners and judgement system.
The system is implemented with several modules: the game module that processes all the game logic such as hit objects appearing and judgement with software running on a NIOS II processor core, the input modules that interfaces with on-board peripherals such as USB and PS/2 and converts to standard pointing and keystroke signals for the game module, the graph module that takes instructions from the game module and distributes to its submodules performing specialized hardware rendering, a sound module that , and optionally a file IO module that allows loading skins and bitmaps from external storage devices such as SD card.
Block Diagram
-------------
Features
--------
> Bold items denotes required features
**Game Functionalities**
* [ ] **Song selection view**
* [ ] **Gameplay view**
* [ ] **Score report view**
* [ ] **Beatmap parsing**
* [ ] Animated hit objects
* [ ] Song preview
* [ ] Scoreboard
* [ ] Pause
* [ ] Mods
* [ ] Settings
**Input devices**
* [ ] **USB Mouse driver**
* [ ] **PS/2 Keyboard driver**
* [ ] Wacom tablet driver
* [ ] USB hub support
**Graphics**
* [ ] **VGA output driver**
* [ ] **Graphics service & task distributor**
* [ ] **Bitmap renderer**
* [ ] **Bitmap resizable copy**
* [ ] **Layer blending**
* [ ] **Vector renderer**
* [ ] **Line**
* [ ] **Elliptic Curve**
* [ ] **Bezier Curve**
* [ ] SVG paths
* [ ] **Font renderer**
* [ ] **Fixed-width bitmap font**
* [ ] Variable-width bitmap font
* [ ] Variable-width vector font
* [ ] Effects renderer
* [ ] Particles
* [ ] Pointer trails
**Audio**
* [ ] **Audio driver**
* [ ] **Multitrack mixdown**
**Miscellaneous/Utilities**
* [ ] **Timing**
* [ ] **PNG Parsing**
* [ ] **MP3 Parsing**
* [ ] Zip parsing
Difficulty
----------
We estimate that the minimal baseline product will be of 7-8 difficulty. The baseline specification already contain a set of complex features regarding software complexity, hardware logic and different peripheral drivers. Additionally, the high timing requirement for rhythm games would enforce us to keep different modules accurately synchronized while achieving the maximum frame rate, or the game will become unplayable. In terms of features to implement, *osu!* contains significantly more complex graphics than old arcade games, with images and vector objects all over the place.
Our optional features contains increased complexity in most modules, so we expect that a full product worth 9-10 difficulty. These include software and hardware implementation of a great variety of fancy graphics like particles, subtle effects, transitions and animations, highly extensible application by loading files from external sources, near full compatibility with any published *osu!* beatmap files and highly-complicated input device drivers such as USB hubs and wacom tablets with custom protocol.