Open main menu

CDOT Wiki β

Changes

GAM666/Team A*

10,756 bytes added, 04:26, 26 October 2012
Added File Format information.
|-
|World loading / rendering
|'''MOSTLY DONE'''
|
# Load the world from file into an array in memory. (file format to be decided)
|-
|}
 
== Level File Format ==
This file format is a work in progress. The final file format may or may not be the same as described.
=== Example File ===
<div style="white-space: pre; font-family: monospace;">
<span style="color:#0000BF; line-height:200%">Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F</span>
<span style="color:#0000BF">00000000</span> <span style="background-color:#FF00FF; color:#000000">10 10 02 00 00 63 6C 61 73 73 69 63 00 00 00 00</span> <span style="color:#000000">.....classic....</span>
<span style="color:#0000BF">00000010</span> <span style="color:#000000">01 01 01 01 01 01 02 01 02 01 01 01 01 01 01 01</span> <span style="color:#000000">................</span>
<span style="color:#0000BF">00000020</span> <span style="color:#000000">00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00</span> <span style="color:#000000">................</span>
<span style="color:#0000BF">00000030</span> <span style="color:#000000">01 02 02 02 02 02 02 01 02 02 02 02 02 02 02 01</span> <span style="color:#000000">................</span>
<span style="color:#0000BF">00000040</span> <span style="color:#000000">00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00</span> <span style="color:#000000">................</span>
<span style="color:#0000BF">00000050</span> <span style="color:#000000">01 02 01 01 01 01 01 01 01 01 01 01 01 01 02 01</span> <span style="color:#000000">................</span>
<span style="color:#0000BF">00000060</span> <span style="color:#000000">00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00</span> <span style="color:#000000">................</span>
<span style="color:#0000BF">00000070</span> <span style="color:#000000">01 02 01 01 01 01 01 01 01 01 01 01 01 01 02 01</span> <span style="color:#000000">................</span>
<span style="color:#0000BF">00000080</span> <span style="color:#000000">00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00</span> <span style="color:#000000">................</span>
<span style="color:#0000BF">00000090</span> <span style="color:#000000">01 02 01 01 02 02 02 02 02 02 02 02 01 01 02 01</span> <span style="color:#000000">................</span>
<span style="color:#0000BF">000000A0</span> <span style="color:#000000">00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00</span> <span style="color:#000000">................</span>
<span style="color:#0000BF">000000B0</span> <span style="color:#000000">01 02 01 01 02 01 01 01 01 01 01 02 01 01 02 01</span> <span style="color:#000000">................</span>
<span style="color:#0000BF">000000C0</span> <span style="color:#000000">00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00</span> <span style="color:#000000">................</span>
<span style="color:#0000BF">000000D0</span> <span style="color:#000000">01 02 02 02 02 01 01 01 01 01 01 02 01 01 02 01</span> <span style="color:#000000">................</span>
<span style="color:#0000BF">000000E0</span> <span style="color:#000000">00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00</span> <span style="color:#000000">................</span>
<span style="color:#0000BF">000000F0</span> <span style="color:#000000">01 01 01 01 01 01 01 01 01 01 01 02 01 01 02 01</span> <span style="color:#000000">................</span>
<span style="color:#0000BF">00000100</span> <span style="color:#000000">00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00</span> <span style="color:#000000">................</span>
<span style="color:#0000BF">00000110</span> <span style="color:#000000">01 01 01 01 01 01 01 01 01 01 01 02 01 01 02 01</span> <span style="color:#000000">................</span>
<span style="color:#0000BF">00000120</span> <span style="color:#000000">00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00</span> <span style="color:#000000">................</span>
<span style="color:#0000BF">00000130</span> <span style="color:#000000">01 01 01 01 01 01 01 01 01 01 01 02 01 01 02 01</span> <span style="color:#000000">................</span>
<span style="color:#0000BF">00000140</span> <span style="color:#000000">00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00</span> <span style="color:#000000">................</span>
<span style="color:#0000BF">00000150</span> <span style="color:#000000">01 02 02 02 02 02 02 02 02 02 02 02 01 01 02 01</span> <span style="color:#000000">................</span>
<span style="color:#0000BF">00000160</span> <span style="color:#000000">00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00</span> <span style="color:#000000">................</span>
<span style="color:#0000BF">00000170</span> <span style="color:#000000">01 02 01 01 01 01 01 01 01 01 01 01 01 01 02 01</span> <span style="color:#000000">................</span>
<span style="color:#0000BF">00000180</span> <span style="color:#000000">00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00</span> <span style="color:#000000">................</span>
<span style="color:#0000BF">00000190</span> <span style="color:#000000">01 02 01 01 01 01 01 01 01 01 01 01 01 01 02 01</span> <span style="color:#000000">................</span>
<span style="color:#0000BF">000001A0</span> <span style="color:#000000">00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00</span> <span style="color:#000000">................</span>
<span style="color:#0000BF">000001B0</span> <span style="color:#000000">01 02 01 01 01 01 01 01 01 01 01 01 01 01 02 01</span> <span style="color:#000000">................</span>
<span style="color:#0000BF">000001C0</span> <span style="color:#000000">00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00</span> <span style="color:#000000">................</span>
<span style="color:#0000BF">000001D0</span> <span style="color:#000000">01 02 02 02 02 02 02 02 02 02 02 02 02 02 02 01</span> <span style="color:#000000">................</span>
<span style="color:#0000BF">000001E0</span> <span style="color:#000000">00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00</span> <span style="color:#000000">................</span>
<span style="color:#0000BF">000001F0</span> <span style="color:#000000">01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01</span> <span style="color:#000000">................</span>
<span style="color:#0000BF">00000200</span> <span style="color:#000000">00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00</span> <span style="color:#000000">................</span>
<span style="color:#0000BF">00000210</span> <span style="background-color:#33CCFF; color:#000000">FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF</span> <span style="color:#000000">ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ</span>
<span style="color:#0000BF">00000220</span> <span style="background-color:#33CCFF; color:#000000">FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF</span> <span style="color:#000000">ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ</span>
<span style="color:#0000BF">00000230</span> <span style="background-color:#33CCFF; color:#000000">FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF</span> <span style="color:#000000">ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ</span>
<span style="color:#0000BF">00000240</span> <span style="background-color:#33CCFF; color:#000000">FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF</span> <span style="color:#000000">ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ</span>
</div>
 
=== Header ===
 
Shown in <span style="background-color:#FF00FF; color:#000000">Magenta</span> above, this part of the file describes the rest of the file.
 
<source lang="cpp">
#define MAX_LEVEL_HEIGHT 2
#define MAX_LEVEL_WIDTH 16
#define MAX_LEVEL_DEPTH 16
 
struct LevelHeader {
byte width;
byte depth;
byte height;
byte num_nodes;
byte theme;
char name[11];
};
</source>
* width: The true width of the level, up to a maximum of 16.
* depth: The true depth of the level, up to a maximum of 16.
* height: The true height of the level, up to a maximum of 2. May be lowered to 1 if the 3rd dimension is not needed for representing the level properly.
* num_nodes: The amount of path nodes listed at the bottom of the file.
* theme: The texture set to use for this level.
* name: The name of the level.
 
=== World Data ===
 
Shown in White above, this is where all the world texture data is stored. Every 32 bytes of this section represents one 20x20x2 row of the level. Each number on these rows represents a texture that that portion of the row will use.
 
<source lang="cpp">
static TextureData WorldTextureData[] = {
{ L"", ... },
{ L"grass.bmp", ... },
{ L"path.jpg", ... }
};
</source>
 
The above source code shows how some of the textures are stored in the game, this storage is not final, the texture info may be stored in the map itself by the end of development.
 
When you look at the following section of the world data:
<div style="white-space: pre; font-family: monospace;">
<span style="color:#0000BF">00000010</span> <span style="color:#000000">01 01 01 01 01 01 02 01 02 01 01 01 01 01 01 01</span> <span style="color:#000000">................</span>
<span style="color:#0000BF">00000020</span> <span style="color:#000000">00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00</span> <span style="color:#000000">................</span>
</div>
The top 16 bytes of this data represents 16 columns in the first row where y = 0. The second 16 bytes represents 16 columns in the first row where y = 1.
 
In the above example, 00 represents an empty texture and is '''NOT''' drawn. 01 represents a grass texture and 02 represents a path texture. This correlates to the WorldTextureData array depicted above.
 
=== Pathing Data ===
 
Shown in <span style="background-color:#33CCFF; color:#000000">Blue</span> above, this 64 byte section of the file describes the path that the AI will take in order to reach the end of the map. The data shown in the above example is incomplete and will not work. 0xFF just means it is an invalid node: -1.
 
<source lang="cpp">
#define MAX_PATH_NODES 32
 
struct Coord {
Coord(char x, char y) : x(x), y(y) {}
Coord() : x(0), y(0) {}
public:
char x, y;
};
 
Coord _pathNodes[MAX_PATH_NODES];
</source>
 
The _pathNodes array stores the series of x,y coordinates from 0-num_nodes. This is read from the file in sequence.
 
For example:
<pre>00 00 01 00 01 01 02 01 FF FF</pre>
Contains a total of five path nodes:
<pre>
x: 0 , y: 0
x: 1 , y: 0
x: 1 , y: 1
x: 2 , y: 1
x: -1, y: -1
</pre>
 
The first path node is at 0,0. The enemy will start at this node. The next node is 1,0. The enemy will then move from it's current node (0,0) up in the x direction to it's new node (1,0). The enemy will continue to follow this series of nodes over time until he reaches the end node (num_nodes) or when the node's x or y value is less than 0 (invalid node).
 
With this basic system we should easily be able to represent the enemy movement in the 3d world.
1
edit