Difference between revisions of "Alpha Map Format"

From wiki.vg
Jump to navigation Jump to search
m (Categorizing)
 
Line 56: Line 56:
 
         s = "-" + s
 
         s = "-" + s
 
     return s
 
     return s
 +
 +
Example code in C#:
 +
 +
 +
<source lang=csharp>
 +
public static string Base36Encode(long input)
 +
                {
 +
        if (input == 0){ return "0"; }
 +
        string chars = "0123456789abcdefghijklmnopqrstuvwxyz";
 +
        bool negative = (input < 0);
 +
 +
StringBuilder sb = new StringBuilder();
 +
 +
if (negative) {
 +
input = -input;
 +
sb.Append("-");
 +
}
 +
while (input > 0) {
 +
sb.Insert((negative ? 1 : 0), chars[(int)(input % 36)]);
 +
input /= 36;
 +
}
 +
return sb.ToString();
 +
}
 +
</source>
  
 
= Players =
 
= Players =

Revision as of 13:28, 2 March 2011

Alpha worlds consist of several files, all held together in one folder under a very rigid directory structure.

Level

The level is a file called "level.dat" in the root of the world.

Name Type Description
Data Compound General level data
Name Type Description
RandomSeed Long The seed of the world, which is used to generate new geometry.
SpawnX Int The X coordinate of the default spawn point
SpawnY Int The Y coordinate of the default spawn point
SpawnZ Int The Z coordinate of the default spawn point


Chunks

Chunks are stored in folders inside the world corresponding to their coordinates in base-36. The path is "<base-36-x-63>/<base-36-z-63>/c.<base-36-x>.<base-36-z>.dat", where <base-36-x-63> is the base-36 representation of the X coordinate of the chunk AND'd bitwise with 63.

For example, if we have the chunk coordinate (39, -13), we end up with the path 13/1f/c.13.-d.dat

The main world is stored in the root directory of the world. The Nether is stored in the "DIM-1" folder in the root and uses the same chunk folder system.

The Base-36 Algorithm

To retrieve the base-36 representation of a number, use the digits "0123456789abcdefghijklmnopqrstuvwxyz", and prefix the result with a hyphen ("-") if the number is negative.

Example code in Python, from Beta:

def base36(i):
    """
    Return the string representation of i in base 36, using lowercase letters.
    """
    letters = "0123456789abcdefghijklmnopqrstuvwxyz"
    if i < 0:
        i = -i
        signed = True
    elif i == 0:
        return "0"
    else:
        signed = False
    s = ""
    while i:
        i, digit = divmod(i, 36)
        s = letters[digit] + s
    if signed:
        s = "-" + s
    return s

Example code in C#:


public static string Base36Encode(long input)
                {
	         if (input == 0){ return "0"; }
	         string chars = "0123456789abcdefghijklmnopqrstuvwxyz";
	         bool negative = (input < 0);

		 StringBuilder sb = new StringBuilder();

			if (negative) {
				input = -input;
				sb.Append("-");
			}
			while (input > 0) {
				sb.Insert((negative ? 1 : 0), chars[(int)(input % 36)]);
				input /= 36;
			}
			return sb.ToString();
		}

Players

Persistent data for players is stored in a folder called "players". Each player has a file called "<username>.dat".

Name Type Description
Pos List of 3 doubles X, Y, and Z coordinates of the player position, in pixel coordinates
Rotation List of 2 doubles Yaw and pitch of the player, in degrees

Map Generation

There are several approaches to map generation.

Noise

Two-dimensional noise functions can be used to provide a terrain height at certain coordinates.