This assignment is due
by Monday, November 30, 2016 by 11:59pm.
With a flash the candle lights and glows brightly! The flame from this
tiny candle more than fills the room and you find yourself shielding
your eyes. Reconcentrating your thoughts, you recast the spell and the
candle goes out. Impressed, the man informs you:
"Your training is done. I can teach you no more. The time
has come, you must return to Olympus and claim what is rightfully yours. Time moves
more slowly here. While you were completing your training, a battle has already begun. You must make haste and put to use
everything you have learned. There is a return portal through here.
You will find yourself back in the city streets. Now go! Fly you
fool!"
You rush through the door not thinking what may lay on the other side.
Part I - Repel The Enemy
The city is filled with chaos. Street carts are overturned and people
are running every which way. You decide your best course of action is
to head against the flow and towards the present danger. At the city
gates, you see the battle is already raging on. You must conquer Olympus and take your
place a top the mountain.
Look in your pocket. The man slipped you a casting book.
Of course! Your Pet comes to the rescue again. You had forgotten your
Pet came through the portal with you. Fumbling through your pockets,
you find the small book. Quickly you open it and begin reading the
incantation.
For this assignment, your goal is to design a basic 3D game. The two
key components of the game will be using a particle system and perform
collision detection. The exact goal for the game is up to you to
decide. The exact design and visual look is up to you as well, but you
should be encouraged to incorporate all aspects we have discussed
this far. At a minimum, your game should have the following features:
- The World - The Hero and the Enemies should be moving
around the world. The world should consist of a 2D plane but have a
defined boundary. Consider using a Bézier Surface to add
some 3D movement to your characters. A carefully placed hill can
obscure the view of where enemies are coming from or coins are
located. As seen below, it will be possible for the characters
to fall off of the world.
- The Hero - The Hero shall be under the user's control. The
user can move the Hero around the world (probably by using the wasd
keys, maybe he/she can jump too by pressing space!) and there should
be some goal the Hero is trying to complete (visit every square of
the world, collect coins, pass through hoops, etc). It is possible
for the Hero to fall off the edge of the world. If this occurs, then
the user falls to their death (feel free to animate the death scene,
they spin and rotate as they fall and then splat! hint: particle
system?). The Hero should be animated as they move. The Hero can
look however you want.
- The Enemies - There will be N Enemies spawned
around your world. The Enemies will represent a particle system, so
it could be possible for more Enemies to be spawned over time if you
desire. The Enemies will exhibit some very special properties.
First, each Enemy has a given heading denoted by the direction they
are facing. Every frame the Enemies move one step forward along
their heading. As the Enemies move, they should be animated as well.
(You may use the Spheres from Lab11 but you are encouraged to design
your own Enemy.)
The Enemies
are also attracted to the Hero and are constantly trying to capture
the Hero. In addition to moving along their heading, every frame the
Enemy's heading should be updated to be one tick closer to being
aligned with moving towards the Hero. (To accomplish this, calculate
the vector from the Enemy to the Hero. If the Enemy's heading is
aligned with this vector, then do nothing. If they do not agree,
move the Enemy's heading one angled step towards the Hero vector.
This will cause the Enemy to move along an arc until they are facing
the Hero.)
In addition to
the Enemies simulating a particle system and being attracted to the
Hero, collision detection must be performed between every Enemy and
between the Hero as well. If two Enemies as they are moving collide,
then they should react accordingly. Either they bounce off of each
and each has their headings updated to reflect the collision (as if
two billiard balls collided); or one of the Enemies dies and the
other has its heading reflected; or both take damage until their
health reaches zero; or they merge into a larger Enemy (for the
Spheres, the resultant MegaSphere could have a radius equal to the
sum of the two merging Spheres). Also, if an Enemy collides with the
Hero then the Hero should take damage, or be killed, or something
should happen. The exact details of what happens is up to you.
Lastly, it is possible for an Enemy to fall off the edge of the
World just as the Hero does. Feel free to animate the death scene as
well. This would be a good instance to create an overhead
minimap placed in a viewport so the player knows where all the
Enemies are coming from.
- Objects in the World - Feel free to add additional objects
around the World. However, if there is a tree or building in the
World, the Hero or an Enemy should no longer be able to pass through
the objects as the Hero once was able to. Collision detection should
be performed against static objects to prevent this. Therefore the
path of least resistance is to place no additional items in your
World (but that's not as cool).
What the Hero and Ememies look like are up to you. What the World
looks like is up to you. The World should be placed within a Sky Box
to give everything a sense of where they are in the World. You are
encouraged to add sound, shaders, anything else we learned.
With the spell done, you prepare the face the onslaught as you have now
attracted all the Enemies towards yourself. You must use your learned
skills to defeat every last one.
Part II - Website
Update the webpage that you submitted
with Assignment6 to include an entry for this assignment. As usual,
include a screenshot (or two) and a brief description of the program,
intended to showcase what your program does to people who are not
familiar with the assignment.
Documentation
With this and all future assignments, you are expected to appropriately
document your code. This includes writing comments in your source code
- remember that your comments should explain what a piece of code is
supposed to do and why; don't just re-write what the code says in plain
English. Comments serve the dual purpose of explaining your code to
someone unfamiliar with it and assisting in debugging. If you know what
a piece of code is supposed to be doing, you can figure out where it's
going awry more easily. Proper documentation also means
including a
README.txt
file with your submission. In your submission folder, always include a
file called
README.txt
that lists:
- Your Name / email
- Assignment Number / Project Title
- A brief, high level description of what the program is / does
- A usage section, explaining how to run the program, which keys
perform which actions, etc.
- Instructions on compiling your code
- Notes about bugs, implementation details, etc. if necessary
- How long did this assignment take you?
- How much did the lab help you for this assignment? 1-10 (1 - did
not help at all, 10 - this was exactly the same as the lab)
- How fun was this assignment? 1-10 (1 - discontinue this
assignment, 10 - I wish I had more time to make it even better)
Grading Rubric
Your submission will be graded according to the following rubric.
5% |
World is placed within a Sky Box. |
10% |
Hero is user controlled and animated while
moving. |
20% |
There is a goal for the Hero to complete. |
10% |
Enemies are animated while moving and move
one step along their heading. |
15% |
Enemies are attracted to the Hero and their
heading is updated each frame. |
10% |
Hero and Enemies can fall off the edge of
the world. |
15% |
Collision detection is performed between
Enemies. |
10% |
Collision detection is performed between
the Enemies and the Hero. |
5% |
Submission includes source code, Makefile,
and README.txt. Source code is well documented. Webpage
named <heroName>.html submitted and updated with screenshot
from latest assignment. Submission compiles and executes in the lab
machine environment.
|
Experience Gained & Available Achievements
Assignments +100 XP |
Web +100 XP |
The Mountains Are
Calling |
Submission
Please update you Makefile so it produces an executable with
the name a7. When you are completed with the assignment, zip
together your source code (including all necessary object, shader,
texture files), Makefile,
README.txt
, and www/ folder. Name the zip file,
HeroName_A7.zip
. Upload this file to Blackboard under Assignment6.
This assignment is due
by Monday, November 30, 2016 by 11:59pm.
|