Welcome to The Terraform Project
- a game by Eric Yew

This page mirrored here. Look there for most up-to-date stuff.

05/11/04 - Update

Here's my postmortem

This is going to be a continuing project, cause it's not done yet, but I really want to keep working on it.

Here's some screens from the final demo:
- Screen 9
- Screen 10
- Screen 11
- Screen 12
- Screen 13


04/22/04 - Update

New, check out some concept art by Mark Wyszomierski

New Screenshots:
- Screen7
- Screen8

Spent a ton of time working on a robust pathfinding system this update:
- Two levels of pathfinding
- First level, large (~1/4 of a screen) tiles
- Second level, cells small enough for smallest unit
- On entry to new tile, secondary pathfinder called to find path across this tile to next big one
- Limit scope of A* to small number of grid squares, still allow complex pathing between units/buildings

I am also working on a pathfinding priority system
- If unit collides with another, one with lower priority will stop/get out of way
- If no path is found out of a tile, try to move surrounding units if they are lower priority

New Stuff completed:
- Some more UI
- Most of pathfinding
- Unit, Building, and Resource database build from XML
- 3ds model loading
- Have concept for art, etc
- Weak attempt at formations, it sucks

Stuff remaining to do:
- Finish up networking, event backend already in place
- Combat engine! (w/ cool effects)
- Art is coming along well

Bottlenecks: Formations and moving groups of units around = huge pain. I might make unit movement a little more dumb.


04/16/04 - Update

It's carnival, so I didn't really get too much done this update.

Not too many changes as far as functionality goes in this one, mostly tweaks to the engine.
- Added some game content, a couple buildings/units while real art is coming along
- Added buildings database, built from XML
- Implemented some little UI things (click and drag selection)
- Optimized engine for performance, goal is always >60fps, with lots of units on screen

Here's a new screenshot:
- Screen6

On a completely unrelated note, here's my 'studio' bumper:
- Xelios


04/12/04 - Update

Check it out, the game is making progress
- Parses and loads XML unit files
- Constructs unit database from XML
- Loads 3DS models, materials, and textures
- Units correctly hug ground, constrained to ground normals
- Loads XML configuration settings

Here's a screen with a test unit:
- Screen5


04/06/04 - Update

Progress is coming along pretty well, a lot of the backend support was completed.
- Texutre Manager
- Input Manager
- Terrain subdivision and generation
- Quadtree culling
- Input handling setup for networking
- Player and unit framework
- Mouse based selection and coordinate assignment

At this point, basically you can select the spheres that are placeholders for units, and make them move arround.
Controls so far:
-Your mouse scrolls the terrain when it's at the edges of the window
- Left click: select unit
- Right click: move unit to target
- Esc: exit

Here are screenshots:
- Screen1
- Screen2
- Screen3
- Screen4

Lots of stuff to do still:
- For now there are hardcoded test variables, and setup need to be read from an init file
- Model loading has to be incorporated via L3DS
- Unit/Building parser and loader
- A* pathfinding must be ported over from lab3
- Building functionality must be implemented
- Networking
- Combat engine

Bottlenecks:
- There's an annoying bug when the UI is drawn to the screen, it messes up the depth buffer an interferes with unit navigation (UI is turned off in submitted build)
- I'm having some trouble reliably constraining pitch,roll of a unit to the terrain normals. I might have to come up with a better interpolation system, otherwise they pop back and forth.

Conclusions:
- Overall I think it's going quite well, and I'm actually ahead of schedule for this milestone. There was a lot of foundation that needed to be put in place that's done now, so everything from here on out is actual game logic and some networking stuff.

NOTE: The CVS code will not build under linux because of some windows specific stuff, I have submitted a build to the ftp server


Formal Project Proposal

Game Name: Terraform

Development Team: Eric Yew (ecy@andrew.cmu.edu)

Game Genre: Real-Time Strategy

Brief Description:
Terraform is an overhead perspective 3D real-time strategy game where the player controls his fledgling Mars colony, mining resources and researching technologies to build structures and units. The player will wage war upon other colonies for control of the planet’s surface using various units each with their own particular strengths and weaknesses. The ability to build units and structures will follow a tech-tree, and any construction will require varying amounts resources. There will be a heavy emphasis on strategy and tactics, since all units will have weaknesses and will maintain carefully balanced rock-paper-scissors offensive/defensive relationships.

Scope:
For this class, I plan to get a completely working and extensible framework up and running. After the initial engine is in place, I can then add more units, buildings, and their behaviors as a continuing project. I plan to have a few units and a couple structures available for play by the final demo, but due to time constraints, I will shoot for a limited subset of units/structures, while still providing functional and enjoyable gameplay. My main concern is designing the engine so that new units, structures, and their accompanying behaviors, rules, and models, etc. can be added via resource files to the game rather than changes to the code, in a more open-ended, extensible, and data-driven design.

Game Features:
- Variety of units and buildings, each with different strengths/weaknesses.
- Use an endless variety of strategies and tactics against opponents.
- Mouse-based interactive unit picking and control.
- Waypoint assignments for movement
- Fully 3D game engine.

Significant Technical Features:
- Mouse interactivity for picking, highlighting groups of units, and order issuing
- Dual-resolution path-finding for map traversal and obstacle navigation.
- Combat engine with weapons effects and unit interactions.
- Encapsulated and compressed game-state update for networked multi-play (?)
- Overlay interface for build progress, order-issuing, status, and upgrades.
- Tile based terrain, alpha-blended/multi-textured at edges of tiles.
- Completely data-driven extensible design for units, structures, and accompanying abilities and behaviors.

Implementation Plan:
- Terrain will be a tile-based system utilizing textures obtained online. In addition to holding texture information, each tile will also hold collision, ‘is-passable’, and resource information if applicable.
- Content modeling and texturing will be done in 3D Studio Max by both myself and an artist friend. Model loading will be accomplished via the L3DS library freely available online.
- Sound effects will be obtained online, and will be handled by the FMOD library, freely available online.
- Unit and building behaviors/parameters will be represented as loadable resource files, written in XML or a plain text file. Example: Building ‘barracks’ will be have parameters on hit points, available technologies, and the ability to create named unit ‘soldier’, whose parameters are specified in the soldier unit file. Potential research items, new possible buildings, and possible unit constructions will all be handled by a unique ID system that will reference other resource files. You can create a new ‘scout’ resource file with necessary info, and the edit the ‘barracks’ resource file and add the ‘scout’ ID to possible units that barracks can produce, and everything else will be handled by the engine.
- Pathfinding will be reuse of lab 3 A* pathfinding code, with an added level of finer grain navigation for groups of units moving around, etc.
- Terrain frustum culling will be using quadtree code from lab 2 that represents terrain as tiles of vertex buffer objects.
- For now I am going to try and forgo an actual enemy AI in lieu of providing networked multi-play. I made this decision because developing a competent real-time strategy AI is infeasible given time restrictions. It’s always more fun to play against another person anyway.

Schedule:
- March 29th: Begin work on terrain engine, utilizing lab 1 framework.
- April 6th: Terrain engine functional, can move camera around, as well as select a ‘unit’ on screen via click selection. Able to translate mouse clicks to terrain coordinates.
- April 13th: Model and resource file loading and parsing complete. Pathfinding for units integrated, can click and move a unit around terrain.
- April 20th: User interface in place with accompanying feedback. Major functionality in place, can build structures and units, mine resources.
- April 27th: Combat engine in place, units fight, networked state updates working.
- May 1st: No new features, finish up remaining stuff, weapons effects, etc.