Skip to content
Snippets Groups Projects
Commit da4d5e9e authored by Fang Lu's avatar Fang Lu
Browse files

Proposal update

parent e2333d88
No related branches found
No related tags found
No related merge requests found
*.pdf
osu!fpga
========
***ECE 385 (Fall 2017) Final Project***
An [osu!](https://osu.ppy.sh) like rhythm game on DE2-115 FPGA.
Fang Lu, Xutao Jumbo Jiang
*Fang Lu, Xutao Jumbo Jiang*
Overview
--------
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
-------------
This project reproduces the major gameplay experience of the desktop rhythm 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.
Features
--------
> Bold items denotes required features
**Game Functionalities**
* [ ] **Song selection view**
......@@ -73,14 +65,8 @@ Features
* [ ] **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.
Timeline
TODO
--------
* [ ] 11/8 - 11/14
......
ECE 385 Final Project Proposal
==============================
***Section AB8 (Fall 2017)***
Fang Lu, Xutao Jumbo Jiang
Overview
--------
This project reproduces the major gameplay experience of the desktop rhythm 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
-------------
![Design Diagram](proposal_diagram.svg)
Features
--------
### Baseline Features
**Game Functionalities**
* Song selection view
* Gameplay view
* Score report view
* Beatmap parsing
**Input devices**
* USB Mouse driver
* PS/2 Keyboard driver
**Graphics**
* VGA output driver
* Graphics service & task distributor
* Bitmap renderer
* Bitmap resizable copy
* Layer blending
* Vector renderer
* Line
* Elliptic Curve
* Bezier Curve
* Fixed-width bitmap font renderer
**Audio**
* Audio driver
* Multitrack mixdown
**Miscellaneous/Utilities**
* Timing
* PNG Parsing
* MP3 Parsing
### Extra Features
**Game Functionalities**
* Animated hit objects
* Song preview
* Scoreboard
* Pause
* Mods
* Settings
**Input devices**
* Wacom tablet driver
* USB hub support
**Graphics**
* SVG paths renderer
* Font renderer
* Variable-width bitmap font
* Variable-width vector font
* Effects renderer
* Particles
* Pointer trails
**Miscellaneous/Utilities**
* Sdcard filesystem
* Zip parsing
Difficulty
----------
We estimate that the minimal baseline product will be of 5-6 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 full frame rate, or the game will become unplayable. In terms of features to implement, *osu!* contains significantly more complex graphics than traditional arcade games, with images and vector objects all over the place.
The most difficult part as we currently estimate falls into the hardware graphics part. Instead of filling regions with solid colors or repeating sprite patterns, our graphics have to consist of image-based texture that cover the entire view. Since the game must run at 60 FPS, we only have about 50ns per pixel, which must cover a sequence of tasks including reading texture from another memory, perform combinational painting logic, storing to the frame buffer, and reserving some time for the VGA controller to read that memory out. Even after over-clocking the SRAM and corresponding modules to 100 MHz, we still have to pack all the painting into roughly less than 3 redraws per pixel. This would require us to devise meticulous DRAM loading strategies and conditional redraw strategies to save as much waits and paints as possible.
Our optional features contains increased complexity in most modules, so we expect that a full product worth 7-8 difficulty. These include software and hardware implementation of a great variety of fancy graphics like particles, 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.
Timeline
--------
* 11/8 - 11/14
* PS/2 driver setup
* Audio driver setup
* 11/15 - 11/28 (Thanksgiving)
* Graphics modules and submodules
* Bootstrapper and main game program
* Modules timing synchronization
* File IO support
* 11/29 - 12/5
* Baseline testing & debugging
* Extra graphics
* 12/6-12/13
* Extra game features
* Extra drivers
* Product testing & debugging
This diff is collapsed.
graph LR
KB((Keyboard)) -- PS/2 --> MAIN
MOUSE((Mouse)) -- USB --> MAIN[Main<br>Game<br>Program]
HID((Other<br>Input)) -. USB .-> MAIN
FS((Filesystem)) -- sdcard --> CODEC[Multimedia<br>Decoder]
MAIN --> GL[<br><br><br><br>Graphics<br>Distributor<br><br><br><br><br>]
MAIN --> CINDEX(Color Index)
MAIN --> MEM(<br>Main<br>memory<br><br>)
MEM --> CACHE(Fast Cache)
CODEC --> MEM
CODEC --> CINDEX
GL --> BITMAP[Pixel Copy]
GL --> LINE[Line]
GL --> ELLIPTIC[Elliptic Curve]
GL --> BEZIER[Bezier Curve]
BITMAP --> FB(Frame<br>Buffer)
LINE --> FB
ELLIPTIC --> FB
BEZIER --> FB
CINDEX --> FB
CACHE --> FB
FB -- VGA DAC --> DISPLAY((Display))
MAIN --> MIXER
CACHE --> MIXER[Audio Mixer]
MIXER --Audio DAC --> SPEAKER((Speaker))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment