Description
g(L)ow is a game based on exploration, collection and illumination. You, the user, will appear on a floating island as a wind spirit. As you observe the eerie island, you notice that it is lifeless and withering away. The goal of the game is to explore this floating island and retrieve magical orbs. These orbs will restore the health of the forest and increase the brightness and illumination of the trees.
The trees within this game were inspired by L System trees - mathematically generated trees that use rules and symbols to model growth processes. The main focus of this game is to revive the eerie forest - to do that, the user must move around the fog-covered island collecting magical orbs; the orbs incrementally increase the brightness (or glow) of the trees. And thus, the name of the game was born: "g(L)ow". The (L) in g(L)ow refers to the L System trees mentioned earlier. We achieved this glow by implementing Bloom into our game.
We wanted to also represent our user, the wind spirit, as a free flowing character. We achieved this using an intricate particle system that directs the user to the nearest orb. When approaching an orb, the particle system will flow toward the direction of the orb, indicating its location.
Controls
L System Trees
Within this game, there are seven different representations of L System Trees. The types of trees are as follows: fractal, gnarled, tall, strong, gnarled wave, tall wave, and strong wave. The trees with wave qualities have branches that are more rounded out and circular. The rest of the trees have branches with straighter characteristics. The L Trees are generated from three parts: an axiom, a ruleset, and operations. The axiom is the starting point for the L Tree. The ruleset describes how to modify the L Tree on each iteration. The operations describe how to build the geometry of the L Tree. Using different combinations of these three things, we can create a variety of different L Trees with different qualities.
Fractal Tree
Strong Tree
Strong Wave Tree
Gnarled Wave Tree
Particle Systems
Our game has two different kind of particle effects. The first is for the windspirit, and the second is for the orbs.
Wind Spirit
The particles for the windspirit are "pulled" towards the nearest orb. This is done by first determining the location of the nearest orb, and then applying a force vector that pushes the particles in that direction.
Orbs
The position of the particles around the orbs are generated by using the equation for a helix spiral curve. By tweaking the amplitude and period of the equation, we are able to have the particles travel around the orb, and come back to the center of the orb.
Shadows
Shadow mapping is implemented for the main light source, however it is difficult to tell due to the number of point lights in the scene and due to the brightness of the main light. To show the shadows, the main light brightness was increased.Included Technologies
Game Clip
Third Party Libraries
- tiny_obj_loader.h from syoyo
- stb_image.h from nothings
- OpenGL Mathematics Library (GLM)
- RapidJSON from Milo Yip
- GLFW
- GLEW
- SFML
- ImGui
Resources
- Fog Outside by Megabyte Softworks
- Better Fog by Íñigo Quílez
- Create a Fog Shader from IN2GPU, by Sergiu Craitoiu
- Apitrace, open source draw call debugger
- Component Based Engine Design from Randy Gaul's Game Programming Blog
- Quick Tip: Use Quadtrees to Detect Likely Collisions in 2D Space by Steven Lambert
- View Frustum Culling from txutxi.com
- Learn OpenGL
- Unity Engine
- Kyle Piddington's MoonEngine
- Game Programming Patterns
- Chapter 1 from Algorithmic Botany
- Evolve Your Hierarchy from Cowboy Programming
- The Book of Shaders
- Component Based Engine Design from Randy Gaul
- Fix Your Timestep!
- About L-systems from sidefx.com
- OGLdev Modern OpenGL Tutorials
- John Chapman's Motion Blur Tutorial
- Quick GUI for MBED projects using Dear ImGui and Serial
- Terrain Generation with a Heightmap
- Drawing Lines is Hard
- Real-Time Rendering
© 2016, by Christiana Ushana, Sam Freed, & Ashley Datallo. All rights reserved.