Sunny To

Final Project

CSC 471 - Spring 2009

Introduction

My final project is modeled after a Nintendo DS game called 'Electroplankton'. I really like music games, and decided to implement my own version of Luminaria, a gameplay mode in Electroplankton. The premise of Luminaria is simple. Luminaria consists of four colored luminaria (smiley faces) that start from opposing corners of a 6x6 grid of arrows. When the user taps on a luminaria, it is set in motion and follows the path set out by the arrows. The luminaria can move in eight directions. When a luminaria arrives at an arrow, it plays a note. Each luminaria represents a different instrumental sound, and each arrow represents a different note. Also, luminaria move at different speeds, creating a rhymic effect.

The player has only the ability to start a luminaria, and to change the directions of the arrows on the grid. Once the luminaria have started moving, it gets pretty difficult to predict their movement and what music would result. Because of this, music played with luminaria sounds chaotic and is difficult to reproduce during another game session. For the most part, every performance can be a unique experience.

To keep my implementation of Electroplankton as close to the original, these are the properties of each sun:

    Red- 360 Beats/Minute Piano
    Yellow - 180 Beats/Minute Celesta
    Green - 90 Beats/Minute Bell
    Blue - 60 Beats/Minute Celesta

Here's a download link to a working executable of my game: Download!

Controls

Mouse Actions:

  • Left Click - Rotate arrow counter clockwise
  • Right Click - Rotate arrow clockwise

Keyboard Actions:

  • 'r' or 'R' - Start the red sun
  • 'y' or 'Y' - Start the yellow sun
  • 'g' or 'G' - Start the green sun
  • 'b' or 'B' - Start the blue sun
  • 'q' or 'Q' - Exit program

Cel Shading

I realized that, originally, my project had almost no graphical component to it. To make up for that, I decided to render my blender models with cel shading. Essentially what I did was first turn off openGL's lighting. Then, I specified a light vector. For every face on my models, I would find the dot product of the face's normal and the light vector. With a 1D texture, I would use the dot product to determine how bright or dark I should color that face. I used a three-shade approach so faces not really facing the light source would be dark, faces kinda facing the light source would be kind of dark, and faces directly or almost directly facing the light source would be bright. Under 'Resources', I've included links to more visually and mathematically explain all this.

Cel Shading in Action

Screen Shots:
Here are some screenshots of my progress as I worked on this assignment.

Plain old smooth shading.
Flat shading(bleh) with orthographic projection.
Flat shading(still bleh) with perspective projection.

To Be Added:

I'm still interested working on this project on my own free time, even after this class is finished. There were so many more features that I wish I could have implemented before the due date. I would have liked to implement:

  • Menus with bitmapped text that allowed the speed and instrument of each sun/luminaria to be changed
  • Particle system effects(explosions or some glow) that triggered whenever a sun played a note
  • Preloaded arrow mappings, or randomly generated mappings
  • Allow for arrows to spin on their own to add a more random factor to the experience
  • A not so plain background

References