Our game implemented many features mentioned in lectures, in the student
presentations, as well as other features we felt would help make the game
a better experience. Below are many of the bigger features.
Animated Models
Our game made use of two animated md2 models, Marvin the Martian for the
Player and an Ogre for the enemies. Both models were animated depending on their
type of movement, with animations for
Camera Angles
Our game made use of two camera views. The first was a side view, similar
to that in classic side scrollers such as Super Mario Brothers. The second was
a rear view, similar to that of the second stage of Contra.
Collision Detection
Collision Detection was handled by using
Axis Aligned Bounding Boxes. Characters such as the Player checked their collision
with all scenes they were in, the scene prior, and the scene after. More information
on how scenes work can be found in
Spatial Partitioning.
Parallax Scrolling
Stage 1 featured what is known as Parallax Scrolling, which is when a
background is moved slowly as the player moves quickly across the stage to simulate
objects in the distance moving. The background in Stage 1 was an image about
four scenes (in comparison, Stage 1 was 20 scenes in total) in width that slowly
scrolled with the player to reveal the whole picture. This saves computation time
that may need to be spent rendering a background behind the player.
Particle Systems
Both stages included two types fire hazards that harmed the player. Both of these
were simulated with a particle system based off of the one found in the tutorial
at
NeHe's
site. The particle system was set up such that particles close to the center
of the flame were white, and the particles slowly turned red as they got further
from the flame.
Sound Effects
Both stages included both music and sound effects. Sound effects were played
using Windows calls, while music was played using the
fmod libraries. Sound effects were various .wav
files from Super Mario Bros. games, while the music was .xm files from Super Mario
Bros. and Contra.
Space Partitioning
Though we didn't use a specific form mentioned in lecture, we used spacial
partitioning to speed up collision detection and time-based movement, as well
as use a somewhat loose form of view frustum culling. Each stage was broken up
into a list of scenes, whi ch each contained information regarding the objects,
hazards, and enemies contained at that portion of the stage. At any time, only
the previous, current, and next scene relative to the Player's position was updated,
minimizing collision calculations and time-based movement on far-away objects.
Time-Based Movement
All movement in the game was time-based, meaning that objects always move
the same amount independant of frame-rate. Only objects in the current, previous,
and next scene were updated at each idle cycle, minimizing the number of updates
necessary. However, this caused a limitation with synchronizing moving platforms
or enemies. Luckily, neither stage design called for such synchronization.