This is the latest version of my program. It now supports all 4 versions of Pre-Classic Minecraft (all the ones in the launcher starting with the letters "rd"), as well as the 3 versions of Minecraft that technically are part of the "Classic" set of MC versions, but that come before the game that most people call Minecraft Classic (versions that start with "c0.0", instead of "c0.30"). This new version of my program has so many features added to it that rather than increasing the version number of my program from 1.0 to something higher, I renamed the program to better describe what it does, and consider this to be 1.0 of the new program. This is also why I started a new thread rather than just pasting an update in the old one.
Now unzip everything in that zip file into your ".minecraft" folder.
If when you unzip it, your virus scanner software immediately detects it and removes it, that is a false positive. I know Norton AV detects it as malware (not sure about other AV programs), and in fact it detects all EXE files compiled from Visual Basic 6 as malware. Tell your AV software to ignore this file in all future scans, and also to undelete/unquarantine the current file in question. If your AV software doesn't support undelete/unquarantine, then after configuring it to ignore it in future scans, go back and unzip the EXE file again.
If when you run it, you get an error about missing files, what you are most likely missing are the VB6 redistributables/runtimes (the core files that all VB6 programs need to run). You will need to download these, and put them in your windows\system32 folder or your Windows\syswow64 folder (depending on whether you are using a 32bit or 64bit version of Windows). To get these files, download the zip file package of them from: http://www.mediafire.com/download/xyo6tw44xygyqgx/Required_Redistributable_VB6_Runtime_Files.zip
What's in the zip file for my program:
gzip.exe (needed to compress and decompress the level.dat file used by these very early versions of MC)
compress.bat (creates a compressed copy of the "level" file, called "level.dat")
decompress.bat (creates an uncompressed copy of the "level.dat" file, called "level")
Minecraft Pre-Classic Level Editor.exe (this is the executable file for my program)
Using the program:
If you already have a levels.dat file from one of these very old versions of Minecraft, that you would like to edit in my program, run decompress.bat to create an uncompressed file called "level". This is the file that my program can load and save. After making any changes to an existing level (or creating a new level from scratch), and saving it to a "level" file, you will need to compress it with compress.bat, into a "level.dat" file, before it can be used in Minecraft. Note that my program only detects the elevation of the terrain, and creates terrain of various elevations. It doesn't support true 3d levels (tunnels, rooms, etc). If you have any interior 3d structures that you created in MC that are in the "level" file that you are editing, my program, when it regenerates the level, will completely wipe out those 3d indoors structures. Also it calculates where dirt, grass, cobblestone, etc blocks should be based on their Y coordinates. If your terrain already featured something of a different material than my program would have generated at that location, my program will overwrite it with the block type that it would normally put there.
There are many controls in this program. The gray box with a green border around it is the drawing area. This is where you will draw different terrain elevations onto the level. The possible elevations are between 1 block high and 64 blocks high. The maximum used Y coordinate (MaxY) for a 1 block high terrain is 0. The MaxY for a 64 blocks high terrain is 63. MaxY always is elevation minus 1. A point in a level with the highest terrain (64 blocks high) is represented by a white pixel. A point in a level with the lowest terrain (1 block high) is represented by a white pixel. All elevations in between have various gray shades. If there is no terrain present at a particular point (you could fall through the level there), that point is represented by a red pixel. An interesting fact about these old versions of Minecraft, is that in the 2 oldest versions (rd-132211 and rd-132328), the level data doesn't represent different types of solid blocks with different numbers. A block either is present or a block is either solid, or air. What texture is used (grass or cobblestone), is specifically determined by its Y coordinate. If it has a Y coordinate of 42, then it has a grass texture. Blocks at all other Y coordinates have the cobblestone texture. The gray shade that is the default color that the drawing area starts with when you run the program, is the shade that represents this Y coordinate. This guaranties that if you just run the program and immediately save the level, the level will be flat with the top layer having grass on it in the 2 oldest versions of MC.
The first button you see below the drawing area is the "Clear" button. This button clears everything that has been drawn, so that the drawing area once again represents a flat level with a MaxY of 42 (the grass layer in the oldest 2 versions of MC).
The next button to the right is "Generate Random Terrain". This does exactly what it sounds like. It generates random elevations in the terrain based on a random seed supplied by another control I'll discuss later, and the jaggedness of the terrain is controlled by a lowpass fillter that is also set by another control that I'll discuss later.
The "Load Level" and "Save Level" buttons are pretty self explanatory. They load and save the uncompressed "levels" file to whatever folder has the EXE file for this level editor (now you see why the EXE file had to be placed the ".minecraft" folder, which is where the saves for these earliest MC versions go).
Below this, there is a box that shows the current color to be drawn (or flood-filled) into the drawing area. And just to the right, there is a slider for setting the current elevation to be drawn. The number indicator to the right of this shows the currently set MaxY value (Elevation - 1, not the Elevation value directly) for drawing. The button to the right of that is the "Default Elevation" button, which sets the slider 42 (the MaxY value that is grass on the 2 earliest MC versions).
The set of buttons below the elevation slider are the tool selection buttons. "Draw" allows you to draw free-form with a width of 1 pixel. "Fill" allows you flood-fill an enclosed region in the drawing area. "Color Picker" allows you to select a color from the drawing area, by simply clicking on a pixel with the desired color. Just below these buttons is the "Current Tool" indicator. The text in this box tells you the currently selected tool.
To the right of these drawing tool buttons is the "Erase" checkbox. Checking it changes your current color to red, so you can draw (or flood-fill) red in the drawing area, to create holes that go all the way down through the level (allowing you to fall out of the level, in all but the most recent two versions of these old versions of MC, specifically c0.0.13a and c0.0.13a_03, which have a hardcoded indestructible bedrock layer in the game just one block below the lowest editable layer in the level file). Unchecking it changes your current color back to the gray shade based on the current position of the elevation slider. This checkbox will automatically become checked if a red pixel is clicked on with the Color Picker tool, and it will automatically become unchecked if any grayscale pixel is clicked on (and at the same time the elevation slider will also move to represent the currently selected gray shade).
In the upper right corner of the program's window, there is another set of controls. If the "Compatibility Mode" checkbox is checked, all features that are not supported on the earliest two versions of Minecraft, are disabled. This prevents the 3d generator that creating blocks in the "level" file that will not display in the oldest two versions of Minecraft. Remember, each byte in these 2 versions of MC, can only be a 0 or 1, and the texture that is to be used is determined by its Y coordinate in the game. In all the other old versions of MC that came after these first 2, the texture of a given block is determined directly by the value in the byte that represents the block in the "level" file. In these first 2 versions of MC, any value greater than 1 in a given byte, is treated as if it was 0 (air block), so that no visible/solid block appears at those coordinates in the game. The "Compatibility Mode" checkbox is designed to prevent this problem. Also when Compatibility Mode is enabled, the button that normally has the text "Default Elevation" on it, will instead say "Grass Elevation" on it, as the Y coordinate is what determined the block texture on these 2 earliest versions of MC. A world created in Compatibility Mode, used on any version of old MC more recent than the first 2 versions, will have the "stone" (but not "cobblestone") texture on absolutely every solid block (no grass anywhere). Also, the next two checkboxes are disabled when Compatibility Mode is enabled, as these are based on the bytes of data in the "level" file holding different values for different block textures.
If Compatibility Mode is not enabled, different block types (block textures) will be saved into the bytes for the blocks when the "level" file is saved. My program determines which texture to assign to a block, based on its Y coordinate. The rules my program uses are as follows:
The lowest 5 blocks are always stone, no matter what else.
The topmost block in a column is always grass, unless the column is 5 blocks or less high.
The 3 blocks below the topmost block are always dirt, unless the column is 6 blocks or less high (remember stone is always in the bottom 5 layers of blocks).
If there is room below the lowest dirt block, and above the highest stone block, the remaining blocks in that column will be cobblestone.
At no point are wooden plank blocks generated by my program (even though the all versions of MC that support multiple solid block textures, have the wooden planks texture available), as planks are man-made pieces of lumber, and so would not occur in nature in real life.
The next control is the "Random Transition Regions" checkbox. It affects the above stated rules that determine where different blocks appear, by inserting random numbers into these rules. The two transition regions that are affected are the stone/cobblestone transition, and the dirt/cobblestone transition. The random number is generated for each column of blocks and will have one of 3 possible values, -1, 0, and 1. This means that the thickness of the stone layer, at the bottom of the level, can vary between 4 blocks and 6 blocks, and that the thickness of the stone layer, just below the grass layer, can vary between 2 blocks and 4 blocks.
Next item down is the "Spawn Bushes" checkbox. If this is checked, bushes will be generated on the top surfaces of the terrain, when the level is saved. The slider below this checkbox (the one labeled "Bush Spawn Probability") determines the probability at each point on the surface of the level, that a bush will spawn there. It can be set between 1% and 100%. 100% means that every top block in the terrain will have a bush on top of it (unless the top block is already at a Y coordinate of 63, in which case there is no room above it to put a bush). Bushes are not available until Minecraft version rd-161348. Using a level with bushes on it in version rd-160052 (the version just before rd-161348), will cause the game to crash. Needless to say, the bush isn't available in the 2 earliest versions of MC, which were what Compatibility Mode was intended to support. Therefore, when the "Spawn Bushes" checkbox is checked, the "Compatibility Mode" checkbox is disabled.
The "Rand Seed" textbox allows you to put in any integer value you wish to be your seed (and strips off any fractional part of a number if you put in a mixed number like 1234.56), or a text string that is then converted into a number (similar to the way that modern versions of Minecraft allow you to type any text, not just numbers into the seed textbox in the game prior to creating the level). If you don't type in any seed, any function that my program uses that requires random numbers, it will automatically generate a random integer number and put that number in the text box for use as a seed for the random number generator. The automatically generated seed uses the random number generator function built-in to VB6, which itself gets its seed by using the current time from the computer's clock. The random function I use in this for random numbers that allows for a user-input seed is mathematically the same same as the one hardcoded into VB6 programming language, except the way I wrote it, it is a lot easier to reset the random generator I wrote (so I can reuse the same seed to restart the same sequence of random numbers), than the one built into VB6 (so the VB6 built-in one is only used to generate a random seed for my random number generator, in case a person didn't manually fill it in). If the seed isn't filled in manually, it will be generated automatically when you use any part of the program that requires randomness, and then this seed will be automatically placed in the textbox so that it will be used (unless it's manually changed or removed) in all future operations that require an an initialization of the random number generator.
There are two times that random numbers are used in this program. One is when saving, if "Random Transition Regions" is checked and/or "Spawn Bushes" is checked. The other is when you click on the "Generate Random Terrain" button. This fills the drawing area with random noise. How sharp that noise is, is determined by the strength of the lowpass filter. The strength of the filter is determined by which numbered option button is pressed, below the Terrain Lowpass Filter Strength label. If its set to 0, there is no filtering, and true white noise fills the drawing area, with very rapid changes in elevation, and extremes in elevation extent (with the highest values of MaxY being at the at the maximum possible Y coordinate of 63, and the lowest values of MaxY being at the lowest possible Y coordinate of 0). This strong, true white noise can be brought under control (made into "pink noise") by setting a filter strength above 0 (the default is 3). 1 is a slight amount of filtering. 6 is very strong filtering (and in fact, filters stronger than this don't offer much improvement). The number sets the strength the filter by controlling the number of iterations it uses (taking the output of the previously filtered data, and filtering it again). The filter itself is a simple 3x3 kernel filter, with the kernel values being:
1/9 1/9 1/9
1/9 1/9 1/9
1/9 1/9 1/9
Here's a screencap of the editor, showing a smiley face shaped level that I made.
And here's a screencap of Minecraft Pre-Classic rd-161348, with the above mentioned smiley face shaped level running in the game.
I was able to get the aerial view despite no way to fly in this early version of MC, by pressing the R key on the keyboard to respawn my character, which always starts high in the air in this old version of MC. Notice the little blue guy running around on the ground just under the chin of the smiley face. That's one of the randomly generated Steve clones that ran around in some of these early versions of the game, who's purpose I believe was to test the game engine's ability to handle multiple mobs.
Download the program from:
http://www.mediafire.com/download/j12ka95b50trimg/Minecraft_Pre-Classic_Level_Editor.zip
Now unzip everything in that zip file into your ".minecraft" folder.
If when you unzip it, your virus scanner software immediately detects it and removes it, that is a false positive. I know Norton AV detects it as malware (not sure about other AV programs), and in fact it detects all EXE files compiled from Visual Basic 6 as malware. Tell your AV software to ignore this file in all future scans, and also to undelete/unquarantine the current file in question. If your AV software doesn't support undelete/unquarantine, then after configuring it to ignore it in future scans, go back and unzip the EXE file again.
If when you run it, you get an error about missing files, what you are most likely missing are the VB6 redistributables/runtimes (the core files that all VB6 programs need to run). You will need to download these, and put them in your windows\system32 folder or your Windows\syswow64 folder (depending on whether you are using a 32bit or 64bit version of Windows). To get these files, download the zip file package of them from:
http://www.mediafire.com/download/xyo6tw44xygyqgx/Required_Redistributable_VB6_Runtime_Files.zip
What's in the zip file for my program:
gzip.exe (needed to compress and decompress the level.dat file used by these very early versions of MC)
compress.bat (creates a compressed copy of the "level" file, called "level.dat")
decompress.bat (creates an uncompressed copy of the "level.dat" file, called "level")
Minecraft Pre-Classic Level Editor.exe (this is the executable file for my program)
Using the program:
If you already have a levels.dat file from one of these very old versions of Minecraft, that you would like to edit in my program, run decompress.bat to create an uncompressed file called "level". This is the file that my program can load and save. After making any changes to an existing level (or creating a new level from scratch), and saving it to a "level" file, you will need to compress it with compress.bat, into a "level.dat" file, before it can be used in Minecraft. Note that my program only detects the elevation of the terrain, and creates terrain of various elevations. It doesn't support true 3d levels (tunnels, rooms, etc). If you have any interior 3d structures that you created in MC that are in the "level" file that you are editing, my program, when it regenerates the level, will completely wipe out those 3d indoors structures. Also it calculates where dirt, grass, cobblestone, etc blocks should be based on their Y coordinates. If your terrain already featured something of a different material than my program would have generated at that location, my program will overwrite it with the block type that it would normally put there.
There are many controls in this program. The gray box with a green border around it is the drawing area. This is where you will draw different terrain elevations onto the level. The possible elevations are between 1 block high and 64 blocks high. The maximum used Y coordinate (MaxY) for a 1 block high terrain is 0. The MaxY for a 64 blocks high terrain is 63. MaxY always is elevation minus 1. A point in a level with the highest terrain (64 blocks high) is represented by a white pixel. A point in a level with the lowest terrain (1 block high) is represented by a white pixel. All elevations in between have various gray shades. If there is no terrain present at a particular point (you could fall through the level there), that point is represented by a red pixel. An interesting fact about these old versions of Minecraft, is that in the 2 oldest versions (rd-132211 and rd-132328), the level data doesn't represent different types of solid blocks with different numbers. A block either is present or a block is either solid, or air. What texture is used (grass or cobblestone), is specifically determined by its Y coordinate. If it has a Y coordinate of 42, then it has a grass texture. Blocks at all other Y coordinates have the cobblestone texture. The gray shade that is the default color that the drawing area starts with when you run the program, is the shade that represents this Y coordinate. This guaranties that if you just run the program and immediately save the level, the level will be flat with the top layer having grass on it in the 2 oldest versions of MC.
The first button you see below the drawing area is the "Clear" button. This button clears everything that has been drawn, so that the drawing area once again represents a flat level with a MaxY of 42 (the grass layer in the oldest 2 versions of MC).
The next button to the right is "Generate Random Terrain". This does exactly what it sounds like. It generates random elevations in the terrain based on a random seed supplied by another control I'll discuss later, and the jaggedness of the terrain is controlled by a lowpass fillter that is also set by another control that I'll discuss later.
The "Load Level" and "Save Level" buttons are pretty self explanatory. They load and save the uncompressed "levels" file to whatever folder has the EXE file for this level editor (now you see why the EXE file had to be placed the ".minecraft" folder, which is where the saves for these earliest MC versions go).
Below this, there is a box that shows the current color to be drawn (or flood-filled) into the drawing area. And just to the right, there is a slider for setting the current elevation to be drawn. The number indicator to the right of this shows the currently set MaxY value (Elevation - 1, not the Elevation value directly) for drawing. The button to the right of that is the "Default Elevation" button, which sets the slider 42 (the MaxY value that is grass on the 2 earliest MC versions).
The set of buttons below the elevation slider are the tool selection buttons. "Draw" allows you to draw free-form with a width of 1 pixel. "Fill" allows you flood-fill an enclosed region in the drawing area. "Color Picker" allows you to select a color from the drawing area, by simply clicking on a pixel with the desired color. Just below these buttons is the "Current Tool" indicator. The text in this box tells you the currently selected tool.
To the right of these drawing tool buttons is the "Erase" checkbox. Checking it changes your current color to red, so you can draw (or flood-fill) red in the drawing area, to create holes that go all the way down through the level (allowing you to fall out of the level, in all but the most recent two versions of these old versions of MC, specifically c0.0.13a and c0.0.13a_03, which have a hardcoded indestructible bedrock layer in the game just one block below the lowest editable layer in the level file). Unchecking it changes your current color back to the gray shade based on the current position of the elevation slider. This checkbox will automatically become checked if a red pixel is clicked on with the Color Picker tool, and it will automatically become unchecked if any grayscale pixel is clicked on (and at the same time the elevation slider will also move to represent the currently selected gray shade).
In the upper right corner of the program's window, there is another set of controls. If the "Compatibility Mode" checkbox is checked, all features that are not supported on the earliest two versions of Minecraft, are disabled. This prevents the 3d generator that creating blocks in the "level" file that will not display in the oldest two versions of Minecraft. Remember, each byte in these 2 versions of MC, can only be a 0 or 1, and the texture that is to be used is determined by its Y coordinate in the game. In all the other old versions of MC that came after these first 2, the texture of a given block is determined directly by the value in the byte that represents the block in the "level" file. In these first 2 versions of MC, any value greater than 1 in a given byte, is treated as if it was 0 (air block), so that no visible/solid block appears at those coordinates in the game. The "Compatibility Mode" checkbox is designed to prevent this problem. Also when Compatibility Mode is enabled, the button that normally has the text "Default Elevation" on it, will instead say "Grass Elevation" on it, as the Y coordinate is what determined the block texture on these 2 earliest versions of MC. A world created in Compatibility Mode, used on any version of old MC more recent than the first 2 versions, will have the "stone" (but not "cobblestone") texture on absolutely every solid block (no grass anywhere). Also, the next two checkboxes are disabled when Compatibility Mode is enabled, as these are based on the bytes of data in the "level" file holding different values for different block textures.
If Compatibility Mode is not enabled, different block types (block textures) will be saved into the bytes for the blocks when the "level" file is saved. My program determines which texture to assign to a block, based on its Y coordinate. The rules my program uses are as follows:
The lowest 5 blocks are always stone, no matter what else.
The topmost block in a column is always grass, unless the column is 5 blocks or less high.
The 3 blocks below the topmost block are always dirt, unless the column is 6 blocks or less high (remember stone is always in the bottom 5 layers of blocks).
If there is room below the lowest dirt block, and above the highest stone block, the remaining blocks in that column will be cobblestone.
At no point are wooden plank blocks generated by my program (even though the all versions of MC that support multiple solid block textures, have the wooden planks texture available), as planks are man-made pieces of lumber, and so would not occur in nature in real life.
The next control is the "Random Transition Regions" checkbox. It affects the above stated rules that determine where different blocks appear, by inserting random numbers into these rules. The two transition regions that are affected are the stone/cobblestone transition, and the dirt/cobblestone transition. The random number is generated for each column of blocks and will have one of 3 possible values, -1, 0, and 1. This means that the thickness of the stone layer, at the bottom of the level, can vary between 4 blocks and 6 blocks, and that the thickness of the stone layer, just below the grass layer, can vary between 2 blocks and 4 blocks.
Next item down is the "Spawn Bushes" checkbox. If this is checked, bushes will be generated on the top surfaces of the terrain, when the level is saved. The slider below this checkbox (the one labeled "Bush Spawn Probability") determines the probability at each point on the surface of the level, that a bush will spawn there. It can be set between 1% and 100%. 100% means that every top block in the terrain will have a bush on top of it (unless the top block is already at a Y coordinate of 63, in which case there is no room above it to put a bush). Bushes are not available until Minecraft version rd-161348. Using a level with bushes on it in version rd-160052 (the version just before rd-161348), will cause the game to crash. Needless to say, the bush isn't available in the 2 earliest versions of MC, which were what Compatibility Mode was intended to support. Therefore, when the "Spawn Bushes" checkbox is checked, the "Compatibility Mode" checkbox is disabled.
The "Rand Seed" textbox allows you to put in any integer value you wish to be your seed (and strips off any fractional part of a number if you put in a mixed number like 1234.56), or a text string that is then converted into a number (similar to the way that modern versions of Minecraft allow you to type any text, not just numbers into the seed textbox in the game prior to creating the level). If you don't type in any seed, any function that my program uses that requires random numbers, it will automatically generate a random integer number and put that number in the text box for use as a seed for the random number generator. The automatically generated seed uses the random number generator function built-in to VB6, which itself gets its seed by using the current time from the computer's clock. The random function I use in this for random numbers that allows for a user-input seed is mathematically the same same as the one hardcoded into VB6 programming language, except the way I wrote it, it is a lot easier to reset the random generator I wrote (so I can reuse the same seed to restart the same sequence of random numbers), than the one built into VB6 (so the VB6 built-in one is only used to generate a random seed for my random number generator, in case a person didn't manually fill it in). If the seed isn't filled in manually, it will be generated automatically when you use any part of the program that requires randomness, and then this seed will be automatically placed in the textbox so that it will be used (unless it's manually changed or removed) in all future operations that require an an initialization of the random number generator.
There are two times that random numbers are used in this program. One is when saving, if "Random Transition Regions" is checked and/or "Spawn Bushes" is checked. The other is when you click on the "Generate Random Terrain" button. This fills the drawing area with random noise. How sharp that noise is, is determined by the strength of the lowpass filter. The strength of the filter is determined by which numbered option button is pressed, below the Terrain Lowpass Filter Strength label. If its set to 0, there is no filtering, and true white noise fills the drawing area, with very rapid changes in elevation, and extremes in elevation extent (with the highest values of MaxY being at the at the maximum possible Y coordinate of 63, and the lowest values of MaxY being at the lowest possible Y coordinate of 0). This strong, true white noise can be brought under control (made into "pink noise") by setting a filter strength above 0 (the default is 3). 1 is a slight amount of filtering. 6 is very strong filtering (and in fact, filters stronger than this don't offer much improvement). The number sets the strength the filter by controlling the number of iterations it uses (taking the output of the previously filtered data, and filtering it again). The filter itself is a simple 3x3 kernel filter, with the kernel values being:
1/9 1/9 1/9
1/9 1/9 1/9
1/9 1/9 1/9
And here's a screencap of Minecraft Pre-Classic rd-161348, with the above mentioned smiley face shaped level running in the game.
I was able to get the aerial view despite no way to fly in this early version of MC, by pressing the R key on the keyboard to respawn my character, which always starts high in the air in this old version of MC. Notice the little blue guy running around on the ground just under the chin of the smiley face. That's one of the randomly generated Steve clones that ran around in some of these early versions of the game, who's purpose I believe was to test the game engine's ability to handle multiple mobs.