 |
 |
 |
 |
 |
HyperBall |
|
 |
|
- OpenGL based 3D engine written in C/C++ (Microsoft Visual Studio 6.0 w/ SP5, 7.1 .NET), featuring:
- Simple DirectMedia Layer (SDL) as base framework for cross-platform compatibility (compiles and runs on Win32 and Linux platforms).
- Image/texture manager that creates or reuses already loaded Image objects:
- Uses SDL_image library to load different image formats (16/24/32-bit).
- Maintains texture material properties including ambience, diffusion, emission, shininess, and specular highlight.
- Ability to draw textures in 2D orthographic mode at pixel offset relative to top/left hand corner.
- Font extension to Image, creating bitmap font display lists that can quickly draw 2D text using printf(...) style function syntax.
- Full-featured math template classes for vectors and matrices.
- Camera system that tracks given view point with acceleration-based panning towards ideal view.
- Event/message manager with priority queue for handling user input events from keyboard, mouse, joystick, and remote network source via ENet API.
- Uses basic 3D map format based on Quake 1/Quake 2 brush based MAP format:
- Built-in conversion tool to convert from MAP format to stripped-down uncompiled binary format.
- QERadient v1.0 build 147 with tweaked entities.def files used as primary editor.
- Runtime octree compiler/renderer for spatial partitioning and hidden surface removal/exclusion during rendering and collision detection.
- Runtime BSP tree compiler/renderer implemented, but not used due to imperfect collision detection.
- Renders using combination of hidden surface removal and recursively built display lists.
- Internal data representation consists of sectors (with position and velocity) containing lumps (a.k.a. brushes) containing vertices, edges, and sides, also grouped by polygons/triangles with texture coordinates (for octree/BSP rendering purposes).
- Support for objects/entities (definable by constants or model filenames).
- Support for simple dynamic lights (lightmaps and cellshading coming soon!).
- Support for tracks/paths that solid map geometry (e.g. platforms, lifts) or entities can move along, using time based linear interpolation to calculate their positions.
- Support for start, end, and teleporter pads that are linkable to each other.
- Physics system that handles basic acceleration, velocity, displacement, and force:
- Uses collision detection based on time (i.e. time before object collides with other object or map surface, edge, or vertex).
- Highly developed collision detection and impact/trajectory calculation for spheres, resulting in very realistic ball movement/bouncing.
- Ability to apply physical attributes to surfaces for friction and spring coeffiecient (e.g. minimal friction creates ice-like surface for ball).
- Definable constants for gravity (defaulted to -9.8), air resistance, terminal velocity, etc...
- Model/mesh support with full frame/animation manager and model instances, extended by:
- Quake 2 MD2 loader with time based vertex interpolation for smooth animation (enabling use of Quake 2 models for demo purposes).
- 3D Studio Max loader for static models.
- Quadric/shape factory that can create spheres, cylinders, disks, cubes, boxes, pyramids, etc...
- Uses sphere and/or axis aligned bounding box based collision detection for speed.
- File system that acts as centralized resource manager:
- Uses custom encrypted binary resource bundle format that preserves directory structure and file names.
- Uses hashtable-like structure in file lookup table, allowing for quick file searching and offset positioning for streaming.
- Built-in tool to compile and encrypt resource bundles given a directory name (bundles all files, recursively traversing through sub-directories).
- Ability to mount/unmount multiple resource bundles, where the mount order retains the file loading precedence in the case that multiple bundles contain the same file/directory.
- Physical files, placed inside directory structure rooted at location of resouces bundles, will take highest loading precedence.
- Quake-style console with fast runtime parser/tokenizer/interpreter/event manager that handles:
- Commands: that support multiple arguments and are directly linked to functions prototyped with the function(int argc, char *argv[]) syntax.
- Variables: that can be strings, integers, floats, or booleans (toggles) and are directly linked to in-code variables. Can be embedded in any command/argument by using $ escape symbol (e.g. echo "player $name is wearing $skin").
- Aliases: that can define new commands as sequences of multiple commands seperated by semicolons (e.g. alias "abort" "echo aborting...; condump abort_$date.log; quit").
- Actions: that are commands with on/off dualities (+command/-command) that toggle in-code action bits and fire events.
- Bindings: that tie key input events to commands or actions that trigger +command for key down events and -command for key up events.
- Menu system with hierarchal menu structure:
- Passes through console interpreter for variables and commands.
- Base menu item with extendible menu items including: command buttons, textboxes, listboxes, sliders, checkboxes, labels, images, key bindings (with key polling), and seperators.
- Sound and music manager that creates or reuses already loaded Sound and Music objects:
- Uses FMOD library for sound and music.
- Supports full loading and playing of WAVE, MIDI, MOD, IT, and XM samples/tracks.
- Supports memory buffered streaming for MP3 playback when loading from resource bundles.
- SDL_mixer library also implementated for sound/music, but not used since FMOD is more capable.
- Partially implemented game logic for action/puzzle ball game inspired by Marble Madness (Atari/NES) and Kirby's Dream Course (SNES). See in-game help for information on user input and changing maps.
- Some models (MD2 files w/ skins) and textures were borrowed from Quake 2 for demonstration purposes:
- Quake 2 is © 1997 id Software. All Rights Reserved.
|
|
 |
 |
 |
 |
|
|
|
|
|