The Game World shall consist of at least four different maps (R-GW-1). Each of the maps have a specific element as the map's theme, which means the element is abundant throughout the map. The players select a map based on which elements or powers they want to use in combat against either the other players or the A.I.
The Game World shall be designed in such a way that the players can use their powers to alter the world. Players can, as they choose, bring down an entire mountain, freeze a body of water, or create a lava flow simply by using a single attack or a combination of their powers. This way, everything in the world is dynamically interactive and the players can create, change, or destroy anything in the world (R-GW-2).
Some of this shall be accomplished by using a particle system for the air, earth, and water elements. These particles will have certain intrinsic properties such as cohesion, collision, mass, size, shape, and temperature (R-GW-3). By using wind power, players can blow another player off a mountain or, by using earth power, drop a boulder on another player. The fire ability will allow players to alter the temperature and hence the properties of these particles, allowing the players to change water into ice or create a heat wave (R-GW-4).
The World terrain shall be generated from height maps and stored in memory. Storing the height map in memory allows us to dynamically display the terrain straight from the array values. We can then dynamically modify the terrain while the game is running, which provides players with the ability to alter the terrain as they desire. If the players wish, they could erect a wall for protection around themselves, or create a chasm to trap another player.
As the system will be designed based on particle systems, the players can mix and match their powers on different elements. This gives the players the freedom to be creative with their abilities. We are hoping, by giving them this freedom, we can expect to see some emergent properties; things happening that we never thought of or hard-coded into it. Therefore, players can combine their earth and fire power to create lava or water and earth to create quicksand (R-GW-5).
The World consists of four different maps, each with a specific dominant element. For example, the water level will have numerous bodies of water scattered all around the level so that players who prefer to/are good at using their water abilities will be more powerful in this world.
The key locations are – Air world, Water world, Fire world and Earth world. At the start of each level, the players will be placed in different corners of the level (spawn points) and the fight begins. In this way, the players have time to develop different strategies based on their powers and preferences. In addition, by setting our spawn points very distant from one another, we avoid the issue of spawn camping, even if an online player, for example, lags before joining the game.
The players will not be allowed to change a world once a match has started. Before the match is started, however, Player 1 will be allowed to choose which world they wish to compete on. Once in the chosen map, players can both walk and fly to destinations.
It is difficult at this point to set an exact number to the scale of the map, as only play-testing will be able to determine this value. The reason for this is the map should not be so big that players spend all their time looking for each other and correspondingly it should not be so small that the moment the game starts the players find themselves under attack. Only proper play-testing will enable us to decide on an appropriate number.
Since the entire world is going to be so dynamic for our basic implementation, we do not plan to have many different kinds of objects. The basic objects in the world would be – rocks, ponds, rivers, lakes and lava flows. All of these objects are based off our particle system, allowing the players to utilize or alter them. Besides these, the players can combine different particles together to create their own objects. There shall also be basic objects such as trees which can be altered by the player (R-GW-6).
The players will have the option to play in either day or night mode. Implementation wise, there is not that much of a difference between these two modes other than setting of light sources.
The game does not necessarily have to have an element of time to it, as the match would be a deathmatch. Therefore, the match does not end until there is only one player left alive. Actual play-testing will determine whether this is practical or not, based on map size and player abilities.
The players will be viewing the world in first-person. The rendering is done using DirectX. We are using various shaders, which allows us to speed up calculations by using the graphics processing unit (GPU) rather than the central processing unit (CPU). This will cause us to have compatibility issues with older systems but allows us to utilize both the CPU and the GPU. However, as we have both of these resources at our disposal, it increases the number of particles that our will be able to handle.
We will be making a 3D rendering engine (R-GW-7), which will be very heavily dependent on DirectX Shaders (High Level Shading Language). The shaders are used for advanced lighting calculations and for doing various effects such as fire. Rendering fire is easy with shaders since we can control the fluctuation of vertices in both color and position. Rendering water, however, is done using a collection of particles. The particles are rendered as spheres and, depending on the temperature, we can set their opacity and color. For instance, if the water is frozen we can make them more solid and set the color to white. The world terrain is rendered using a triangle-list, which can be rendered quickly in DirectX.
Along with the 3D rendering, there is also some 2D rendering that needs to be done. The player's health and manna (energy) will be represented with colored bars. The color of the manna bar shows the element that the player has active (e.g., blue for water, yellow for air and so forth). The following is a mockup of what the HUD (R-GW-8) will look like:
As mentioned above the camera will be in a first person view. It will be similar to the view that you have in most first person shooters. We use a Camera class that contains the position, reference point and orientation. Each entity has its own Camera class, which makes it easy to store its position and orientation.
Since we are relying heavily on DirectX shaders, we feel that this will free up a lot of the CPU cycles for us to utilize on our Game Engine. The Game Engine takes care of all player interactions with the system, the particle engine, collision detection, and the Artificial Intelligence (A.I.).
The Game Engine's main job will be to manage our particle system. As we are setting the game up to allow the players to modify/alter anything in the world, this will be a very expensive job for the Game Engine to handle. If we were not going to offload a lot of the graphical aspects onto the GPU, this would have greatly limited the number of particles the player has to play with. There will be particles for earth, water, and air and fire is simply a state change on the existing particles. For instance, the players can use their fire ability to heat the water and convert it into steam or freeze it to form ice. Depending on the state and temperature of the particles, we can vary the opacity, color, cohesion, and adhesion of the particles. For example, if water particles are in an icy state, they will stick together more and will be solid and white.
Collision detection shall be handled using bounding spheres for players and particles (R-GW-9). Since XNA has a built in function for bounding sphere intersection, we are going to use the technique in our collision detection. We may also use bounding cylinders for the players to provide a tighter fit around the model (R-GW-10).
The light model will be composed of a multi-light system where each light can be activated or deactivated internally.
Each light will have –
Point light type with the possibility of later adding spotlights.
The capability of being positioned independently in world space.
An ambient, specular, and diffuse color.
The lights will be combined with the materials colors to generate the final colors and the lighting will be defined on a per-pixel basis using shaders.
Using shaders for calculating lighting allows us to perform all of our lighting calculations exclusively on the GPU (R-GW-11). This not only gives us more CPU cycles to work with but also give us control over pixel colors.