Table of Contents Executive Summary 2 Game Specifications 3 Background Story 3 Character Bibles 3 Gameplay and Balance 4 Rules and Mechanics 5 Levels 15 Artwork and User Interface 18 Technical Specifications 24 Overview 24 Resolution and Tile Size 25 Game Architecture 25 Networking 26 AI 26 Sound 27 File Format 27 Abstract Data Types 29 Schedule and Personnel 32 Team Member Responsibilities 32 Deliverables 33 Executive Summary You are a criminal, sentenced to a term in the perihelion system. Whether you live or die depends on if you can make the system work for you. The perihelion system is a new system of justice. Criminals are sent to an asteroid belt that orbits a star in an elliptical fashion. As asteroids approach the perihelion, the point in their orbit closest to the star, the temperature rises till everything on the surface is either melted or fused. The temperature is even more than the best environmental suits can handle. Thus, any criminal on an asteroid approaching its perihelion must try to get off. But how does one get off the asteroid? Simply buy passage to another asteroid from one of the many transport pilots that engage in the system. How you get the money to pay for transport is up to you. Perihelion is a top-down strategy game. Every player controls one criminal unfortunate enough to be sentenced to this harsh environment. Each player will start on an asteroid at the outskirts of the system. They will be given only an environmental suit, a ten-foot square portable living shelter, and a shovel. They must earn money in one or more of several ways. They can mine for minerals and sell them to the shopkeepers. They can collect food and water to sell to other players. They can scavenge for equipment that may not have been completely destroyed when the asteroid passed its last perihelion. They can even steal from or sabotage other players. Every player has the same goal, get off the asteroid before it gets too hot. The ultimate goal is to buy your way out of the perihelion system and back into society. The game is multiplayer with possibly thousands of players sentenced to live on hundreds of asteroids in the perihelion system. The system will be comprised of many asteroids of varying type all surrounding a single star. Each asteroid will have a time period to orbit around the star. Furthermore the system will keep track of the amount of time until the next perihelion. There may be zero, one, or many players on an asteroid at any time. The players may interact with the environment, the shopkeeper (every asteroid will have a shop that trades with the players), and/or each other. As stated above, the goal of every player is to get off the asteroid before it reaches a point that is too near to the star. They will do this by purchasing transport to other asteroids farther away from the star. Transport to a nearby asteroid will not be expensive, but if a player's current position is close to the star then buying transport to a nearby asteroid won't do much good. Furthermore, a ticket off an asteroid only covers a player, their money, their portable shelter and whatever hand tools they can carry. Other items must be left behind on the asteroid. This means that every time a player goes to a new asteroid he/she will have to start from scratch (almost). The target audience for this game is teen to adults. It is anticipated that mostly males will want to play this game, but some female players are also anticipated. This game will be unique because it is one of the first massively multiplayer real time strategy games with a cute Science Fiction theme. Furthermore, because players will not be able to take everything with them to a new asteroid, it will allow beginners to play right along side expert players without being at a complete disadvantage. The game playtime will vary depending on the player. A single game session could last as little as 30 minutes and still be productive, and as long as a few hours before an asteroid makes a complete orbit. Players will be able to save character information and continue on a new asteroid at any time. This gives the game virtually unlimited playtime. If the player decides that he/she wants to go straight for finishing the game (buying passage back into society) it will take at least 10 hours, but probably much more. The game will be designed as a top-down strategy game. The graphics engine will be 2D, using tiles for the asteroid maps and sprites for players and objects. The game will be developed for Win32 and ported to Apple, Linux and other Unix environments. The anticipated price for this game when it first reaches the market is $40 to $50. This will include 3 months of online game play. After the initial period a small fee ($3 to $5) will be charged monthly for server access. Game Specifications Background Story: It is 3028 AD. In the Galaxy of Chonchi, where there are many frivolous laws such as wearing one's knickers at all times. A rash of inhabitants have been arrested and detained after having been caught wearing no undergarments. The penal institutions accommodating the criminals have been exhausted, and as a result, many (considered to be the most serious offenders) have been deported to asteroids in the Galaxy of Brine to fend for themselves. Upon arrival, the offenders are issued a shovel and a modest AutoLife Kit (a self-building shelter). In this Galaxy of Brine there are hundreds of asteroids orbiting a central star. In their orbits, all of these asteroids are eventually positioned so close to the star that most living organisms inhabiting the asteroid are destroyed. After passing this point, called the perihelion, the asteroid has the ability to regenerate life in an unusually rapid manner. Through trading and cultivating resources the exiled must muster up enough money to buy his way off the asteroid before he is annihilated. Although we are in the 4th millenium, civilization has regressed to its early stages. The character is placed onto the asteroid with the shortest orbiting cycle with nothing but a shovel and his will to live. Character Bibles: Shop Keepers: Milo: Milo is a kick back type of guy. He used to be a prisoner in the perihelion system, although he will tell you that he was framed. He slowly was able to buy his way out. While in the system he saw how well the traders were doing. He decided that after he got out he would buy a trade ship and start his own shop. Being a former prisoner, Milo remembers how hard it was to survive. He tends to favor the prisoners more than the other traders. Milo is often been known to sell equipment for 10% less than the going rate. Allison: Allison has lived amongst the dregs of society her whole life. Her father was a shopkeeper involved in the perihelion system. She spent most of her life traveling asteroid to asteroid with her father. She has seen many prisoners fall prey to the horrid environment. It is probably this fact that has made her apathetic to people she meets. However, she does have a soft spot for precious metals. She pays well for rare minerals and if she is on an asteroid, it is likely that gold isn't far away. If you can't afford a ticket off the rock, then you had better make your peace with god, because Alison won't give you a break. Jensen and Co. Fredric Jensen is the Warden of the Perihelion system. He owns many of the trade ships that link the prisoners to the outside worlds. He knows that the prisoners are in a tough spot, and that is the way he likes it. 22 years ago Jensen was a trader for the Perihelion Trade Group. Any competition on his asteroid always seemed to have malfunctions. He used this fact to scare away the competition. Eventually he formed his own trade group. It was not uncommon for ships to pack up and leave if one of his ships landed nearby. It is rumored that he fleeced the wallets of some very important people on the outside to get the Warden's job. Immediately after taking control just 3 years ago, he instituted the one shop per asteroid policy. Traders working for Jensen are ruthless. They often inflate their prices knowing that prisoners don't have much of a choice but to buy from them. Jensen's group used to only be a minority, but now they are beginning to rival the numbers of the Perihelion group. Perihelion Trade Group: These are the bread and butter traders of the Perihelion system. They all work for or with the Perihelion Corporation. The Perihelion Corporation has been involved since the beginning. They were instrumental in founding the perihelion system. They are also the largest trade group in the system, about 60% of all traders work with the perihelion group. They set the market rates for all equipment and materials for that comes in or goes out of the system. Their prices are based on market conditions. They could care less what happens to the prisoners here as long as they pay what the computer says. Gameplay and Balance: The game will be simple to operate. The actual control mechanism will be to use the keyboard. The player will move using the arrow keys and perform functions using the action and access keys. Actions will always take place on the tile that the player is currently standing on. The access button will always access something on the tile that the player is facing. Only some areas may be accessed, but all tiles can have one or more actions performed on them. The actual action performed depends on the tile type and the item in the inventory selected. The game will offer unlimited replay value because asteroids are constantly changing. In addition, player characters are gaining more wealth (or losing wealth). This will enable them to access newer more expensive options. Furthermore, there will be new players entering all of the time. This will provide a variety of new interaction. The fact that every time a player is forced to leave an asteroid he/she loses some equipment will also force players to develop new strategies. Players may not want to buy the best buildings if they will soon be lost. Balancing is a tremendous task for this type of game. All types of resources must be balanced so that one does not become the sole type of resource exploited by everyone. This will be done partially during testing and will be regulated during the game by a supply/demand pricing structure. Equipment and buildings must also be balanced. Better equipment should cost more, but not so much that it becomes impractical to use because it never makes a profit before it is destroyed. In addition, some equipment and tools will be able to move to a new asteroid with the player. These items must be balanced in usefulness and price against the items that can not be taken with. Finally the cost to move between asteroids, and ultimately win the game, must be balanced so that moving is affordable, but not cheap. A complete cycle on an asteroid should give the player enough money to buy his/her way back to a safe distance from the perihelion and still have made a little bit of money. This will mean that players that become good at the game will make enough money to win, while players that are not will find themselves growing closer and closer to death. Rules and Mechanics: Perihelion Star System: The Perihelion Star system is a large number of asteroids that orbit a single star. The orbit is in an elliptical pattern and at the perihelion of the orbit temperatures are well beyond the tolerances of any known materials. Asteroids of the Perihelion System: There are about 100 asteroids large enough to be of use in the perihelion system. Each one has an orbit period of between 10 and 30 days (each day in the game will be about 5 minutes of playtime, subject to change for balancing). Every asteroid is inhabited by a trade ship called the Shop, and prisoners in the perihelion system. Resources will be semi-randomly generated on an asteroid every time it passes its perihelion. In addition, equipment left behind by players will have a small chance of surviving the intense heat. This equipment will likely be hidden by dirt and rock that blows around during the intense heat. Controls: Spacebar: Action Button Enter: Access Button Page up: Scroll selected tool up Page down: Scroll selected tool down Del: drop selected tool/building Tab: Global Chat Arrow Keys: Move around the map Action Button: The action button will use the selected tool in the inventory to perform and action on the tile the player is currently on. For example, if the player has the shovel selected and is on a rock tile, the action button will cause the character to start digging. The actual actions preformed will depend on the tool and tile the player is on. Access Button: This will access something on the tile in front of the player. This will bring up the appropriate menu for the player to use. The two types of things players can access are buildings and other players. If the player accesses a building the player will be given a menu of options that building has. If the player accesses another player it will bring up a trading window where the two may trade. Inventory: A player will have an inventory with 5 spaces. Each space can have a tool, a portable building or resources. Each slot in the inventory will be able to hold only one thing at a time. The player can move through the inventory using the scrolling keys. The player will also be able to drop stuff out of the inventory. In addition, one item in the inventory is always selected. This is the item that the player uses with the action button. Scrolling in the Inventory: The player will be able to scroll which item in the inventory is selected. The currently selected item will be highlighted. Drop Selected Item: The player can drop the item in his/her inventory that is currently selected. In the case of portable buildings this will cause the building to be built on the location in front of the player. In the case of tools and resources this will cause the item to be placed on the ground on the tile the player is currently standing on. Menu: The game menu will have 3 options. These are Music On/Off, Sound FX On/OFF, and Quit. If the player chooses to quit then the data will not be saved after the last time he/she was in the transport. Trading with Other Players: Trading with other players will be important. If a trade in initiated by 2 players then a special trade screen will come up. This trade screen will be divided into 4 sections. The entire right half of the screen will be the player's inventory, money, and resources available. The center of the screen will be divided into top and bottom. The top of the screen will be what the other player is offering in trade. The bottom half is what the player is offering in trade. The left portion of the screen will be filled with a place holder such as a picture of the other player or some information. This is done because the trade screen and the shop screen should look the same and the shop screen needs this other section. The format of the trade screen can be seen below. Trade Screen There will also be an "OK" marker, in each of those two sections, that must be set by both players to finish the trade. The OK marker can be toggled using the space bar. Items can be moved to and from the trade area by highlighting them (using the arrow keys) and using the Enter button. Chat in the trade menu will be used the same as the Global Chat. Either player may end a trading session by pushing the ESC key. Global Chat: Pressing TAB will switch to the Global Chat box on the lower portion of the screen. A player may type in this area. When the player presses enter the message will be sent to all other players on that asteroid, and will appear in the char box. While in the Global Chart box players will not be able to perform normal game functions such as Movement or Actions. The computer can also generate messages in the chat box, to inform players of events in the game. Messages in the chat box will be displayed in different colors depending on the player sending the message. Pressing TAB again will exit the Global Chat box and the player can resume playing. Local Chat: Another Chat type is Local Chat. Players will be able to enable global or local chat modes through an escape command in the chat window. Local chat will be handled similar to global chat except in the following ways. When a player presses enter the message will be sent to the server for its delivery. In the local chat system, in order to be a little more realistic, players only chat with players who are close enough to listen to them. Thus, the server will only send the message to players within a certain radius. This has two consequences in the game play: It is necessary to go out and explore the world to be able to talk to other players. On the other hand, this allows some kind of privacy in the communications, and we expect to see players trying to avoid others by going away to talk behind them, just like in the real world. Asteroid Map: The Asteroid map will consist of 100 x 100 tiles. The map will wrap around on all sides, thus creating the effect of a continuous spherical surface. Movement: A player may move his/her character up, down, left or right in a continuous fashion. The player does this by using the arrow keys. Players may be limited in their movement by obstacles in the terrain or by buildings. Player may not position their characters on tiles occupied by buildings. The character icon will always remain in the center of the screen landscape will move relative to the player. The player's actual rate of movement may be influenced by the character's health, equipment, and the terrain. Tiles: The map will be divided into tiles. Tiles will be 32 x 32 pixels and will be able to accommodate an entire character sprite inside. Each tile will have a probability of having each resource. The probabilities will range between 0 and 1. Each tile will also be either navigable or not. The following is list of tile types available: Rock Water Mud Ice Moss Shop: The shop will buy and sell equipment and resources. The price of equipment and resources will be based on a supply and demand structure set forth below. The actual price ranges will be determined during balancing and testing. The shop will also provide transport off the asteroid. There will always be a shop on the asteroid. The shop is the most resistant building to heat and shopkeepers are always the last ones to leave the asteroid and the first to arrive back. The players will access the shop using the Access Key. This will bring up a trade window similar to the one players use to trade with each other. The window will be separated into 4 quadrants as seen below. The right quadrant will be for the player's inventory. The middle top quadrant will be for Items to purchase. The middle bottom will be for items to sell. The left quadrant will be items that the shop has for sale. The break down will look like this: Screen Quadrants for Shop Players move items from one quadrant to the adjacent quadrant in the same way they do in the trade screen. When the player accepts the transaction the computer will tell him/her the remaining balance (plus or minus) that must be paid in money. The player will then have the option to accept or decline. If the player accepts and they receive money on the transaction (sell more value than they buy) then the transaction will be processed and the money added to their money. If the player accepts and they have enough money to pay than the transaction is processed and the player will pay the balance in money. If the player accepts and does not have enough money to pay the computer will notify the player and not process the transaction. The player may not buy more equipment than will fit in his/ her inventory. The shopkeeper on an asteroid will be stored with the map. The shopkeeper will modify the prices of items depending on which shopkeeper it is. Economics Prices for goods used locally (i.e. consumables like food, water, and energy) will begin at the start of a session at the base cost. For each subsequent day the new price will be based on the following equation: Price( n+1 ) = Price( n ) * ( 1 + (( Produced - Used ) / ( Used + Produced )) ) Prices for exported goods (i.e. manufactured goods such as License Plates and Pharmaceuticals) are based on random global tendencies independent of local supplies. For each commodity, the daily price will be determined by: Price( n+1 ) = Base Cost( 1 + A/4 + B/8 + C/16 + D/32 +E/64 ) Where each letter constant holds a random value between 1 and -1, and interpolates to a new value over regular time periods. (A's period is 16 days, B 8 days, etc.) Prices for raw material goods (such as oil or iron) which can be both used locally or exported, will be price based on a combination of the two above equations. Purchasing Transport: Players will be able to purchase transport off an asteroid from the shop. A ticket off the asteroid will cost $1,000 (subject to balancing). The player only takes their portable shelter, money and tools in their inventory with them. Once the player has left the asteroid he/she can save and quit or continue onto a new asteroid. Selecting a New Asteroid: If a player is on the transport he/she can select a new asteroid to land on. The closest asteroid to the perihelion will be free to land on. Other asteroids will have costs calculated based on distance from perihelion, type and population. Selecting to Finish the Game: If the player is on the transport he/she may select to purchase transport back to their home world. The cost to do this will be very high (actual price to be determined during testing and balancing). When the player does this the character name is stored in a list of players who completed the game on the server. The player will also see a short cut scene of being released (not implemented). The character will no longer be playable. Resources: There are 5 classes of resources. Consumables are resources that can be sold or used. Commodities are resources that are gathered or manufactured for sale only. Food is used to keep a player alive. Water is used to keep a player alive and in many manufacturing processes. Waste is generated in many different ways and can be used or stored or disposed of. If a player has too much waste it will cause problems such as stopping production of manufactured goods. The following is a list of resources. Water: Type: water Base Cost: $5 Description: Used to keep a player alive. Players will spend a set amount of water a day for survival. If the player runs out their movement will be cut by 25%. (Implemented) Energy: Type: consumable Base Cost: $10 Description: Used to run buildings and produce resources. (Implemented) Petroleum: Type: consumable Base Cost: $10 Description: Oil. Primarily used for generating energy. (Implemented) Iron: Type: consumable Base Cost: $25 Description: Used to manufacture goods. (Implemented) Titanium: Type: consumable Base Cost: $50 Description: Used to manufacture goods. (Not Implemented) Gold: Type: commodity Base Cost: $100 Description: Precious metal. (Not Implemented) Uranium: Type: consumable Base Cost: $250 Description: Radioactive. May be sold or used to make energy. Very rare and very difficult to obtain. (Not Implemented) Industrial Alloy: Type: commodity Base Cost: $100 Description: Manufactured in a foundry. (Not Implemented) License Plates: Type: commodity Base Cost: $200 Description: Criminals are supposed to make license plates. Manufactured in a License Plate Factory. (Implemented) Chemicals: Type: commodity Base Cost: $200 Description: Produced in a Chemical Lab. (Implemented) Pharmaceuticals: Type: commodity Base Cost: $400 Description: Produced in a Pharmaceutical Lab. (Implemented) Food: Type: food Base Cost $5 Description: There are several different types of food. Each type will be used to produce a different amount of food points. A player will consume a set amount of food every day. If a player runs out of food then the player's movement is reduced by 25%. The following are types of food and how many food points they are worth: Moss: 1 Yeast: 5 Space Tomatoes: 10 Space Cows: 50 (Implemented) Waste: Type: waste Base Cost: -$10 Description: This is bad. Waste is produced as a by-product of various actions. Waste must be disposed of. If a player has too much waste then the player's buildings the produce waste will stop working until the player gets rid of it. (Not Implemented) Buildings: Buildings will accomplish tasks for players automatically. They will be more expensive than tools that perform the same function. Buildings are purchased from the shop. The player carries the portable version of the building with them in their inventory. The drop option will place a building and the building will be set up. Only the Portable Living Shelter will be able to become the portable version again. The following is a list of buildings and their effects. All amounts below are subject to balancing. Portable Living Shelter: This is the player's home base on an asteroid. It can store money, food, water as well as 10 tools or the equivalent. When a player purchases transport off the asteroid, the building folds up and comes with them. (Implemented) Well: Gathers water from rock tiles. Requires 10 energy per day. Produces 20 water per day. (Implemented) Evaporator: Gathers water from Ice tiles. Requires 10 energy per day. Produces 20 water per day. (Not Implemented) Reclamation plant: Slows water consumption. Require 20 energy per day. Player produces 20% more water. (Not Implemented) Refinery: Produces energy from petroleum. Required 25 petroleum per day. Produces 100 energy per day. (Implemented) Solar Cells: Produces energy from sunshine. Produces between 10 and 50 energy per day, depending on the temperature. (Implemented) Fusion Generator: Produces energy from uranium. Requires 10 uranium per day. Produces 200 energy per day. (Not Implemented) Oil Drill: Gathers petroleum. Requires 10 energy per day. Gathers 25 petroleum per day. (Implemented) Iron Mine: Gathers Iron. Requires 10 energy per day. Gathers 25 iron per day. (Implemented) Titanium Mine: Gathers Titanium. Requires 10 energy per day. Gathers 25 titanium per day. (Not Implemented) Gold Mine: Gathers Gold. Requires 10 energy per day. Gathers 25 gold per day. (Not Implemented) Uranium Mine: Gathers Uranium. Requires 20 energy per day. Gathers 10 uranium per day. (Not Implemented) Foundry: Generates Alloys. Requires 10 energy and 25 iron per day. Produces 25 Alloy per day. (Not Implemented) License Plate Factory: Generates License Plates. Requires 20 energy and 10 iron per day. Produces 20 License Plates per day. (Implemented) Chemical Lab: Generates Chemicals. Requires 10 food, 10 petroleum and 10 energy. Produces 20 Chemicals per day. (Implemented) Pharmaceutical Lab: Generates Pharmaceuticals. Requires 20 food and 30 energy per day. Produces 15 pharmaceuticals a day. (Not Implemented) Yeast Vat: Produces Yeast Requires 5 energy per day Produces 10 yeast per day. (50 food) (Implemented) Hydroponics Lab: Produces Space Tomatoes Requires 5 energy per day Produces 10 Space Tomatoes per day. (Implemented) Slaughter House: Turns cows into food Requires 5 energy per use. Needed to turn cows into food. Trash Incinerator: Gets rid of Waste Requires 25 energy per day. Gets rid of 25 waste per day. (Implemented) Storage Shed Stores Resources (Not Implemented) Shop: Buy and sell Resources, see shop above. (Implemented) Tools: Tools are kept in the player's inventory or in storage in a building. The following is a list of all tools available in the game. The action performed by the tool is also listed. Shovel: All players start with a shovel. The shovel is used to dig. The resources available on a tile will be discovered by digging. Iron, Gold and Titanium will be gathered using the shovel. If more than one type is available the type gathered will be determined at random (you never know what you are going to find). (Implemented) Speed Shovel: Digs Faster See shovel above (Not Implemented) Gold Pick: Digs for only Gold (Not Implemented) Titanium Pick Digs for only Titanium. (Not Implemented) Iron Pick Digs for only Iron. (Implemented) Radiation Shield: Allows the player to handle uranium. (Not Implemented) Uranium Extractor Extracts Uranium from the ground. (Implemented) Bucket: Used to gather water. (Implemented) Moss Collector: Collects moss on the ground. (Implemented) Metal Detector: Tells how much of each metal is available on the tile. (Not Implemented) Raft: Enables player to cross water tiles. (Not Implemented) Gravity Boots: Speeds up player movement. (Not Implemented) Jet Pack: Speeds up player movement. (Not Implemented) Space Suits: Space suits are used to keep the characters alive in the harshest environments of the asteroids. The different suits can make the player move faster of be more resistant to heat. The following are the space suits available. Space Tech Suit Model 100 - Basic space suit that a player starts with. Slow moving and low resistance to heat. Space Tech Suit Model 200 - Faster Suit but low resistance to heat. Space Tech Suit Model 300 - Faster Suit but low resistance to heat. Envirotron Suit Model 555 - Slow, with heat medium resistance Envirotron Suit Model 888 - As fast as the Space Tech 200 with medium heat Resistance. Envirotron Suit Model 999 - As fast as the Space Tech 200 with high heat Resistance. Perihelion Corp A Type - Fastest suit available with low heat resist. Perihelion Corp C Type - Fastest suit available with medium heat resist. Perihelion Corp Z Type - Fastest suit available with high heat resist. Perihelion Corp Shop Keeper Type - Slow, but with the most heat Resistance. Levels: Overview: The levels in this game will represent the surface of the asteroids to which the player has been confined. The most realistic way to implement them would be using spherical surfaces, since that is the most common shape for celestial bodies, but then we will have a problem with the representation for the game level design: there is no way to perfectly fit the surface of a sphere on a plane. And we wanted our game levels to be composed of a set of square tiles, each one for a different type of terrain. So the alternative is clear, as seen in man other similar games like Civilization. The world must be a torus (a donut-like geometric shape), which has the property that can be laid on a plane surface and has both vertical and horizontal symmetry, in the sense that walking on the surface along one of those two directions would end with us coming back to the same point. Another alternative for the shape of the tiles is the hexagon, which accomplishes the same tasks as the square, but has the property that results into a less monotonic aspect when displaying the world. Indeed, most of the great hit games in the war/strategy genre use this kind of tile. The drawback that made us not to choose it is the difficulty to visualize it in a plain text file. If we set up the tiles in a row-and-column manner, the aspect of the file while being (text) edited would be way different from the final result. This wouldn't be a problem if we had enough time to develop a level editor, but this is not the case, and we need to keep the design as simple and clean as possible, so the right choice was the square. Differences between levels: There are quite a few properties that distinguish the asteroids from each other, mainly due to the astronomic situation of the asteroid in relation to the central star. For example, there is a big difference due to the orbit time. Asteroids with shorter orbit times are less desirable than those with longer ones, because the longer orbits permit their inhabitants to make more money and thus escape further away. However, they can also be more crowded and then offer more competition to the game, since more and more prisoners want to come to this place to get some resources and go away. Asteroids are also known to have different primary forms of life (if any!). There are quite a few of them that are completely arid and just allow the player to mine for some metals to trade with. These are normally the ones with more extreme life conditions, like those closer (they are too hot) or further away (too cold) to the sun. Others have a pretty large amount of enduring forms of life such as moss. Some life has even evolved on some asteroids that have livable conditions through part of their orbit. These life forms often live in the lakes that exist during the intermediate seasons and hide deep inside the asteroid for the extreme cold and hot seasons. These have become known as sea-monkeys. Players may be able to fish and eat them. Level Pyros: Pyros is one of the asteroids with a shorter orbit time, around 7 chronos (the time unit used in Chonchi) long. It is the asteroid to which the prisoners are confined, left alone and defenseless. It is usually pretty crowed due to the large number of dissidents in the galaxy and the small size of the asteroids. It is a rich place in terms of mining, but people there don't usually have the time and means to make a lot of money. Heavy mining equipment is impractical because of the short orbit so prisoners tend to mine using picks and shovels. Travel traders will charge them high rates to get out of this area of the asteroid belt because it is such a terrible place to live. If this doesn't seem discouraging, we have to remember the fact that this asteroid region is rich with minerals. Uranium is especially abundant and due to its high price, it is often mined here. As a summary, it is a small, potentially productive area that one might want to revisit sometime later when better uranium mining tools are affordable. Abundant Resources: Solar Energy, Uranium, Iron, Titanium. Rare Resources: Water Non-Existent Resources: Natural Food Level Aqua: This is one of the intermediate distance asteroids, and it is also one of the most lively ones. There are more life forms here than on all other asteroids combined. This is due to the unique environment. A big percentage of its surface is covered by water, which sustains life. The main forms of life are moss and a being known as sea-monkeys, a kind of microscopic animal that grows in the water and is the seed for ocean life in planets like Earth. So the easiest way to obtain resources in this asteroid is clear, fish sea-monkeys to eat and live. The problem with this approach is that the good fishing spots might not lay right next to the coast, but in the middle of the sea, and players need some means of transportation to get there and come back safe. It is very important to notice that the high amount of water zones make transportation difficult along the asteroid, and sometimes there will be a need for other means like rafts or swimming fins. On the other hand, the possibility to get some resources by fishing can be dramatically improved if we have better tools as ships again, but also poles, nets and other such hardware. We are also considering allowing the player to build structures like bridges or fords to ease the navigation of the complicated asteroid's geography without having to actually swim or acquire a boat. The weather conditions in the Aqua region of the asteroid belt allow different alternatives for generating food. For example, with hydroponics station and a few seeds we can grow some tasty and profitable tomato-like plants. In addition Space Cows can exist in this environment most of the time. Of course water isn't a problem because of the many lakes and rivers that run around Aqua asteroids. This is a good destination when looking for an itinerary towards freedom, since its relatively long orbit period might allow us to earn enough money to escape away from this nightmare. Abundant Resources: Food, Water. Rare Resources: Titanium, Gold Non-Existent Resources: Uranium This is the level with most terrain variation, and thus most design possibilities. That is why we chose it to be the first target in our development. In case we don't have time to design and develop many more, at least we'll have a nice complete one. There are a few design quests in this level, as they are the big amount of terrain tiles we have to make and the different kinds of resources we have to fit and balance. From the geographic point of view, the arrangement of the dry terrain in continents and a bunch of lakes suggest the need to find a means of transportation through the water. Also, the first player that reaches certain rich point for minerals can benefit from the probable lack of competition there, because the other players might take long time to figure out how to get there. Level Teles This is the most distant point of the system, and thus the one with the longest orbit time, but also the coldest one during most of its year time. It can be the definitive step to escape or our death, depending on the equipment players carry and buy. There are little to no mineral resources here, so the only chance to survive it is to escape as soon as possible or buy stuff from somewhere else. But not everything is negative, since the orbit is so long players may be able to set up thriving manufacturing businesses here. They can purchase raw materials from the shop and manufacture them into valuable items. It is also said that many rare items have been lost here in the bitter cold. It is even rumored that a cold fusion devises where once manufactured here. There is plenty of Ice here, but very little food. For a brief period the asteroids here turn to almost exclusively water as they pass close to the sun. Abundant Resources: Water, Time Rare Resources: Iron, Titanium, Gold, Uranium Non-Existent Resources: Natural Food Artwork and User Interface: Overview: The artwork for Perihelion will have a rude-cartoon feel to it. Real-life textures as well as cartoon drawings will be combined. The game is humorous, so it is appropriate that colors will be bold (but perhaps not bright). For the bulk of the game, the player will have a top-down view of his character moving about the landscape. The bottom sixth of the screen will be occupied by an informative status bar. There will also be special screens for logging in and selecting characters. There are two other important special screens that that the players will encounter. These are the trade screen and the shop screen. Details on these screens can be found in the rules and mechanics section. In Game UI: The screen will be divided into 2 regions. The top will be the map and the bottom will be where information is displayed. In the map section will be the portion of the map that the character can see. The character will be in the middle. On the right is the inventory. In the bottom portion of the screen will be a list of the resources the player has. The Global Chat part will also be in the bottom of the screen. A mock screen shot of the main user interface is below: User Interface Start Menu: When a player starts Perihelion they will be prompted with several options. These include create a new player, Continue with an existing player, change the Preferences, or to Quit. The opening screen shot is below. Starting Menu New Character Screen: When a player chooses to create a new player they will have several choices to make. They will need a name, race and color of their player. Below is a screen shot of the New Player Interface. New Character Menu Continue Screen: The if the player chooses to continue the player will have to choose a character to continue as. The screen shot below shows this. Character Select Menu Asteroid Selection Screen: Once a player has selected a character and logged onto the server they will have to choose an asteroid to go to. Below is a screen shot of what this will look like. Asteroid Selection Menu Music: The overall aesthetic of the game is that of a somewhat cute science-fiction genre game, therefore the soundtrack will be generated with three influences in mind: Erik Satie (early 20th century composer, who wrote interesting comical and introspective music with relatively simple harmonies), Aphex Twin (techno, jungle and ambient artist), and the soundtrack for the original M.U.L.E. game (a game from which this game draws its influence and which has a simple, driving, motivating soundtrack). Ideally, different tracks will be played of heightening tension as the game progresses to heighten the sense of impending doom and necessity of escape preceding the perihelion. Initially a slow ambient piece or Satie related piece will be played, followed by more moving/working type music, and followed by a very rhythmically intricate jungle type of piece for the final moments of the cycle. Most of this music will be implemented simply with a sequencer controlling a synthesizer which will implement the general midi standard, with also some extra fm-synthesis sounds added in to add more to the "spacey" quality. Sound effects: Sound effects will be used primarily as feedback for the actions of the player as well as ambient sounds of objects currently displayed on the screen. Sound effects will be generated by real world recordings, processed by MAX/MSP, soundhack, or ProTools, and augmented with public domain library sounds, if necessary. Some sound effects that will be implemented include: Footsteps for players: Ideally different sounds for different terrain tiles. Action sounds for each tool used: Digging sounds for shovels, radio sounds for sensing devices, etc. Building Sounds: At least one sound for each building when accessed. Bubbling sounds for a chemistry lab, factory sounds for factories, bazaar sound for the market, etc. Interface sound: a click or beep on menus when items are cycled through, and money sound when a trade or purchase is made. Construction sound: when a new building is placed. Technical Specs Overview Perihelion will be developed using the following tools. The program will be written C and C++ using the Simple Directmedia Layer (SDL) libraries for graphics, networking, Input, and Audio. The primary target platform will be Windows 2000, but our goal is to make the program portable enough that it can easily be ported to other Windows environments, Linux, Unix, and Macintosh. (All the platforms that SDL runs on) . Our coding project will be Open Source, and managed on Sourceforge.net, using CVS for version control. Resolution and tile size: The screen resolution of the game will be 800x600 pixels and it will run in windowed mode for the development stage and in full screen for the final game. So it would be easy to change between fullscreen and window mode. As said before the levels are based in a tile system layered in a rectangular grid. Each tile will be 32x32 pixels and the character's sprites will be no bigger than this size. Game architecture: The components of the game and their interconnections are shown in figure 1. There is a server and multiple clients. Each client represents a player and runs in a different machine. The server can run in a different machine or in the same machine as the client. Game Architecture Architecture of the Client The main role of the server is to keep the state of the world. This is accomplished by the Game Engine module. It also has a networking module for communications with the clients. The client has more subsystems. The Input module receives commands from the player through the keyboard (so far no mouse is being used) and stores the state of the keys. Then the Game Engine processes this data and other internal data and sends requests for updating the world to the server. The server replies accepting or denying these updates. This way the client has a copy of the server's world as accurate as possible. The next step is sending this world to the Graphics module to get a visual representation of it. Finally, some actions can trigger sound events that are sent to the Sound module. Networking: The protocol used to connect the server and the clients is UDP. We chose this protocol because is more efficient than TCP and because the game networking environment will be a LAN, where not a lot of packets are expected to be lost. The server has a time out. During this period it accepts request of all the clients but when the time out expires no more requests are accepted. Then the server resolves possible conflicts between clients and updates its internal world. Finally it sends these updates (not the whole world) to all the clients. A.I.: Artificial Intelligence in the initial implementation of the game will be very limited, since the game is designed to be multiplayer, with real persons controlling each of the human players. All of the controls for the players will be implemented as direct controls, so there will be no "pointing and clicking" and no pathfinding will be needed. The only necessary algorithms are if there are any animals or autonomous moving machines implemented in this version of the game. (Space cows, monsters, robots etc.) These will be implemented with very simple algorithms, such as a drunk-walk, or a simple reflex agent, running away from any players which are too close, etc. If a specific location is needed to be obtained, (space cows going to their feeding trough, for instance) an algorithm like A* may be implemented. A larger AI task will be the implementation of computer controlled players. This should be implemented as a client program, with exactly the same interface to the server as the regular client interface. This can be initially implemented as a goal based agent, with a specific list of sub-goals (exploring, mining, manufacturing, etc.) to simply try to maximize profit. Trading with AI players may not be initially necessary at all, and can simply use the same setup as store trading, modified by the particular players needs and supply. Sound Technical Specs: Sound will be implemented by using the SDL_Audio Library and the SDL_Mixer library for sample management. SDL_Mixer implements a sample scheduler with 1 channel for music and 8 channels for sound effects. The SDL_CD and SMPEG3 libraries may also be used if either CD-Audio or mp3 playback is desired at a future point. For the initial implementation, all samples will be put into .WAV format, with most likely mp3 compression implemented at a later point. The Sound engine will be running on a thread separate from the game engine, with changes made to the scheduler at specific times during the game loop, similar to the graphical updates. Sound Interface: The Interface used to interface will be similar to the one used in the graphics engine. The sound engine will be passed either a full world state, or a limited list based on the objects which are located in the vicinity of the player. A list of all sound currently playing will be kept to insure that a sound for a given object is not duplicated if already currently playing. Ambient sounds will be based on this world state. Also a separate interface function will be needed for feedback sounds based on the players actions. File Format Specs: We have a directory called 'data' in which all the resources are in. Inside data we have a file called 'tiles.txt' with all the possible tiles of the game. The format of this file is described in 'tiles-fileformat.txt'. We also have a file called 'objects.txt' inside 'data', with all the possible objects of the game. The format of this file is described in 'objects-fileformat.txt'. Then we have a file for each level of the game. This file begins with the word 'level' and the number of the level is appended, like 'level1'. Finally it ends with a '.txt' extension. Here is an example: 'level2.txt'. The format of this file is described in 'levels-fileformat.txt'. Object file format: FIELD TYPE --------------------------------------------------- n unsigned int OI file capabilities unsigned int string string DESCRIPTION: ------------ The first field indicate the number of objects in the file Each following line describes an object. It begins with an Object Identifier (OI), the name of the file with contains its drawing and a string representing its capabilities. The capabilities indicate what the user can do with this object. The string is a set of letters, each letter represent a capability if it is in the string. This are the current capabilities: t The user can take this object n The user can do nothing in this tile. This is for implementation purposes. Tiles File Format: FIELD TYPE --------------------------------------------------- n unsigned int TI file capabilities unsigned int string string DESCRIPTION: ------------ The first field indicate the number of tiles in the file Each following line describes a tile. It begins with a Tile Identifier (TI), the name of the file with contains its drawing and a string representing its capabilities. The capabilities indicate what the user can do with this tile. The string is a set of letters, each letter represent a capability if it is in the string. This are the current capabilities: w The user can walk on this tile b The user can build on this tile d The user can dig for resources on this tile n The user can do nothing in this tile. This is for implementatio purposes. EXAMPLE: ------- 3 w n g wbd r w In this case we have 3 possible tiles, w (water), g (grass) and r (rock). The user can do nothing on water, can walk, build and dig on grass and can only walk on rock. Levels File Format: FIELD TYPE DESCRIPTION ------------------------------------------------------------------ name string name of the level width unsigned int width of level in number of tiles height unsigned int height of level in number of tiles tiles char * width * height tiles. each line is a row object x y char int int object identifier and its coordinates in world coordinates, not in tile coordinates NOTES: The object types are in other file. Its format is in the object-fileformat.txt file. The tiles types are in other file. Its format is in the tiles-fileformat.txt file. EXAMPLE: The Island 10 12 wwwwwwwwww wwwwwwwwww wwwwwwwwww wwwwwwwwww wwwwgwwwww wwwgggwwww wwgggggwww wwwgggwwww wwwwgwwwww wwwwwwwwww wwwwwwwwww wwwwwwwwww 1 50, 45 In this example we have a level of 10 tiles width by 12 tiles height. There are just two different tiles: w (water) and g (grass). The level is more or less an island of grass rounded by water. There is a object of type 1 (a house) in the world coordinates (50, 45). Abstract Data Types: typedef int Boolean; const Boolean TRUE = 1; const Boolean FALSE = 0; const int MAXPLAYERS = 20; const int MAXTOOLS = 10000; const int MAXBUILDINGS = 1000; enum Resource {MONEY, WATER, FOOD, ENERGY, OIL, IRON, PLATES, CHEMICALS, NUMRESOURCES}; class Building { private: char type; int posx; int posy; int owner; public: char getType(); int getPosX(); int getPosY(); int getOwner(); void setType(char c); void setPosX(int x); void setPosY(int y); void setOwner(int o); Building(char t, int x, int y, int o); Building(); ~Building(); }; class Tile { private: char type; Boolean occupiable; Boolean resources[NUMRESOURCES]; Building* building; public: char getType(); Boolean isOccupiable(); Boolean isResourceAvail(Resource r); Building* getBuilding(); void setType(char c); void setOccupiable(Boolean o); void setResourceAvail(Resource r, Boolean b); void setBuilding(Building b); Tile( char t, Boolean o); Tile(); ~Tile(); }; class Tool { private: char type; int posx; int posy; Boolean visible; public: char getType(); int getPosX(); int getPosY(); Boolean isVisible(); void setType(char c); void setPosX(int x); void setPosY(int y); void setVisible(Boolean v); Tool( char t, int x, int y); Tool(); ~Tool(); }; class Player { private: char race; char color; int posx; int posy; int resources[NUMRESOURCES]; Tool inventory[5]; int velocity; int dirx; int diry; int selectedTool; int lastSprite; Boolean moving; public: char getRace(); char getColor(); int getPosX(); int getPosY(); int getTileX(); int getTileY(); int getResource(Resource r); Tool getInventory(int i); int getVelocity(); int getDirX(); int getDirY(); int getCardinalDirection(); int getSelectedTool(); int getLastSprite(); Boolean isMoving(); void setRace(char c); void setColor(char c); void setPosX(int x); void setPosY(int y); void setResource(Resource r, int a); void setInventory(int i, Tool t); void setVelocity(int v); void setDirX(int x); void setDirY(int y); void setSelectedTool(int i); void setLastSprite(int i); void setMoving(Boolean b); Player( char r, char c, int x, int y); Player(); ~Player(); }; class World { private: int currentPlayer; int height; int width; int numPlayers; int numBuildings; Tile* map; Player players[MAXPLAYERS]; Tool tools[MAXTOOLS]; Building buildings[MAXBUILDINGS]; int temperature; public: int getCurrentPlayer(); int getHeight(); int getWidth(); int getNumPlayers(); int getNumBuildings(); int getTemperature(); Tile& getTile(int x, int y); Player& getPlayer(int i); void setNumPlayers(int n); void setNumBuildings(int n); void setTemperature(int t); World(); World(int cPlayer, int h, int w); ~World(); Boolean parseMap(char* mapString); }; Schedule and Personnel Team Member Responsibilities: Jeff Ridenour : Music Sound Effects Game Engine Jeremiah Jilk: Game Engine Networking Pablo Diaz Gutierrez: Networking Game Engine Lorenzo Gil Sanchez: Graphics Engine Input Module Level Editor Menu Control Sherry Wang: Art Sprites Menu Art Deliverables: Friday, May 18, 2002: Game Engine: Client Application Server Stub Draw Map, Single Character and Scrolling Arrow Keys Control Art: Single Character One Color Minimal Tile Set Some Sound Effects Friday, June 1, 2002: Game Engine: Client and Server Done Draw All Players and Visible Resources, Buildings Login Screens Load Player Data Complete in Game Input Shop Menu Art: All Sound Effects and Music All Characters in All Colors Expand Tile Set Some Tools and Buildings Friday June 11, 2002 Game Engine: Multiplayer Load Test Implement Buildings and Tools Track Resources Save Player Data Some Balancing Art: More Tools and Buildings Wish List: Game Engine: Implement Character Speed Effects Implement AI Players Complete Global and Local Chat Modes Change World Screen Complete Balancing Test on the Internet Art: Complete Tiles Set Different Asteroid Types Complete Level Editor Perihelion Design - May 7, 2002 Page 1 of 34