Description:
Written by Norton Jester and published in 1961, this is the story of a young boy named Milo who uses a toy tollbooth to enter the "Kingdom of Wisdom". Unlike other "children's" books which can have a satirical bent. This one cleverly shows the reader various challenges that will be faced in life ilustrated through Milo's interactions with the story's characters. Various puns are used exhaustively throughout the book.
The story spans several cities and focuses on Milo's quest to restore balance to the realm by bringing the sisters "Rhymn" and "Reason" back from exile.
Although there are several different locals in the book. Our project focuses exclusively on the city of Dictionopolis, the first city Milo encounters in the story. You as the player must complete a series of quests by talking to various characters in Dictionopolis and winning word duels which are similarly constructed to those found in the Monkey Island series.
[Wikipedia Entry]
Features:
- Intelligent Quest Engine
Quest dialog is assigned to specific characters with progress through levels being tracked.
Quest data is entered into a spreadsheet and then exported into Electro for easy setup.
- Dueling Engine
Allows phrase contest between characters and enabling clever verbal sparring.
Inspiration for this came from the Monkey Island series of games.
- Dynamic Scene Culling
Our project has too many objects and polygons for Electro to be able to handle them all at once.
We use zones to intelligently add and remove regions when they are not in view.
- Expansive Immersive Environment
A large virtual environment has been created with detailed models.
Animated characters, environmental sounds such as birds, market and NPCs make the experience more comfortable.
Tools:
- Electro <http://www.evl.uic.edu/rlk/electro/>
This graphics engine is based on Lua and provides: physics, audio, and input handling.
It has advanced capabilities such as rending on stereoscopic displays and running on a distributed rendering cluster.
- Blender <http://www.blender.org/>
Blender is a 3D graphics modeling and animation program (similar to Maya, AC3D, 3ds Studio Max).
- Python <http://www.python.org/>
Blender supports extensions using python scripts.
The bulk of the scene was setup in Blender and then exported to Electro in one step.
This saved a lot of time since most of model development and positioning was able to be done almost entirely in Blender.
In addition, object attributes such as collision and gravity can be set in Blender.
- LuaEclipse <http://luaeclipse.luaforge.net/>
This is a plugin extension for the Eclipse development environment that allows easy development of Lua based programs (like Electro).
Observations:
Creating a 3D virtual world of any decent size designed for interaction and enjoyment has made us appreciate the work done by professional and academic 3D artists and designers. It's especially interesting how much game deesigners have to work around the limitations of their hardware and software.
Initially, we spent most of our time developing our Blender->Electro software. This software enables us to be able to position our objects in a familiar 3D environment designed for just such a purpose, then export these objects into Electro. Electro reads in obj files, but its reliance on ODE makes it very difficult to set up physical properties correctly. In order to overcome this obstacle, we needed to make a significant modification to the original wavefront obj exporter, to be able to on one hand export the original vertex and material data, and on the other export a file containing the worldspace transformations of these vertices. This new file format (an .electro file), is easily processed by some short lua code, so that objects are displayed correctly. Since Blender also supports a game engine, it's quite easy to add arbitrary properties to the Blender objects, which are carried along into the .electro file, and can affect how the lua code displays or sets up the physics for the world. Some of the properties we use include:
- is_body
- A property that determines if this object should be a body in electro
- mass
- The mass of the object
- geom_type
- The type of the geometry of the object
In order to set the properties of multiple objects, we came up with another Python script that brings up a friendly UI and sets all the electro properties on the selection.
Our next biggest obstacle was the creation of Dictionopolis itself. As none of us were particularly excellent artists, we had to try to make Dictionopolis as interesting as possible, without relying on our artisitic skill. We decided that rather than trying to model the people featured in the Phantom Tollbooth, we would instead represent the people as letters. This not only cut down significantly on some polygonal count issues, but it also worked wonders on our sanity, art-wise.
Like all big collaborative projects time was the limiting factor, not imagination.
Sources:
Project Files:
©Copyright 2007 Chris Davey, Matthew Balman,
Matthew Handley
|