Littoral 1.3 Documentation (ReadMe.htm)
Index
1.0 What Littoral 1.3 Does
1.1 Overview
1.2 Main Function Enumeration
2.0 How to Use Littoral 1.3
2.1 Overview
2.2 Usage Steps Enumeration
2.3 Learn the Basic Features
2.4 Prepare Your Elevation Bitmaps
2.5 Decide if You Wish to Use Vertex Colors
2.6 Prepare Your Object Index File
2.7 Prepare Your Object Bitmaps
2.8 Render the .ESP and Test In-Game
3.0 General Tips
4.0 Limitations
4.1 Does Not Create Surface Normals
4.2 Is Not Idiot-Proof
1.0 What Littoral 1.3 Does
1.1 Overview
This program was written for The Elder Scrolls III: Morrowind v1.2.0722. It creates an .ESP (plug-in file), associated with a parent .ESM (master file). It allows the user to (1) easily and precisely control the elevation data of a 52x52-cell map. It (2) allows but does not force vertex coloring on all landscape textures at and below sea level to simulate how water filters light. It also allows the user to (3) semi-automatically place up to 255 different objects across the map with minimal effort and without sacrificing control.
1.2 Main Function Enumeration
Uses three 3328x3328 24-bit .BMPs, additively, to create the elevation data for a TES3 Morrowind ESP.
Creates vertex color gradients, adjustable, to simulate the color of water changing based on its depth.
Uses a .CSV and up to 255 3328x3328-pixel 24-bit .BMPs to place objects based on chance and location of occurence (.BMPs) with simple two-level collision detection (.CSV).
2.0 How to Use Littoral 1.3
2.1 Overview
Littoral 1.3 is painfully simple to use yet incredibly powerful if one can learn to properly use it. It is a great time saver when creating a total conversion, but do not take that to mean that a perfect landscape doesn't require a lot of time to be invested. There are tricks to precisely control the shoreline and the interactivity of the three elevation bitmaps. Learn your paint program and explore its tricks. Use multiple layers and learn about the various selection methods. Use your imagination.
2.2 Usage Steps Enumeration
Learn the basic features.
Prepare your elevation bitmaps.
Decide if you wish to use vertex colors and, if so, how you will control them.
Prepare your object index file.
Prepare your object bitmaps.
Render the .ESP and test in-game.
2.3 Learn the Basic Features
Run Littoral 1.3 and hover the mouse cursor above each item on the interface. I have created a ToolTip for each item that should give you some idea of its purpose. You will notice three groupings of parameters on the left. The first specifies .ESM/.ESP data as well as the elevation bitmap data. The second is where you control object creation, if you choose to use it. The third allows control of the vertex coloring. The default values will work but feel free to experiment and test your own settings. When running Littoral it will always return to its default parameters, but you may save and load your own settings as well.
2.4 Prepare Your Elevation Bitmaps
This is the most important step in the process of world creation. You will create three 24-bit bitmaps that are 3328x3328 pixels. Littoral reads the bitmaps as grayscale, which means you have an elevation resolution of 256 values/colors.
The bitmap for Elevation1 (coast.bmp, although you can use any name you like) is scaled by Littoral to define elevations from the sea floor to the top of the beach. Its scaling is fixed in order to create a realistic coastline, although the coastline can easily be influenced by the other bitmaps for which you can control the scaling. Color values of 0 - 223 are below sea level, and color values of 224 - 255 are above sea level. Your selection tools in your paint program are very important and useful in creating this bitmap, so learn them well.
The bitmaps for Elevation2 and Elevation3 work much in the same way as the bitmap for Elevation1, although they allow you to control their scaling range. The units specified in Littoral for Range are 1/8th the scale of Morrowind units. So if you wanted the mountains to climb as high as 32768 Morrowind units, you would specify their scale in Littoral as 4096. Littoral scales each bitmap to fit its elevation range, then adds them together to create final elevation data. This allows an elevation resolution of 766 values/colors instead of the 256 you would have if using only one bitmap. The independent scaling of the bitmaps also allows for compressed and expanded ranges to co-exist in the same map.
Typically Elevation2 is used for interior landscape features such as hills and "noise" so the landscape is never perfectly flat, and Elevation3 is used for mountain ranges and more dynamic features. You may use them however you wish.
2.5 Decide if You Wish to Use Vertex Colors
Littoral will render vertex colors regardless, so if you wish to disable them enter values of 255 in the RGB fields. This designates each vertex color as transparent. The default values use colors sampled from photographs of tropical beaches, but you may change these colors if, for instance, you wanted to make a sea of blood or some other color water. The effect of vertex colors is best observed in-game by turning off clipping (~console, "tcl" to toggle) and moving higher in the air. The effect is usually rather subtle from the ground.
2.6 Prepare Your Object Index File
Use the included "objects.csv" as a starting point. The first row of data contains descriptions of each column of data and should be left in place. It is ignored by Littoral, which starts at the second row when parsing the object index. The data you will input into the object index file contains the following:
Object Name - This is the name of the object as it would appear in the Construction Set, or how Morrowind sees the file. Typically this is the same name as the .NIF file, minus the extension. It may contain spaces.
Bitmap Filename - This is the filename of the bitmap associated with the object that determines the probability and location of its occurrence.
Max +/- Scale Variation - This controls the random percentage of scale applied to the object. A value of 20 would mean an object would be created between 80% and 120% of its original size.
Base Size - This specifies the size of the base, or bottom, of the object and is used in collision detection. Multiply it by 16 to convert it to Morrowind units. You will need to measure this in 3dsmax (don't forget to divide the 3dsmax units by 16 since 3dsmax units are equal to Morrowind units).
Top Size - This specifies the size of the top, or canopy, of the object and is used in collision detection. The same rules of unit conversion apply here. An example of the use of base and top sizes and how they affect collision detection is as follows: Object 1, or grass, is small (base size 1) and short (top size 0). Object 2, or a giant mushroom, is large (base size 2) and tall with a wide cap (top size 7). These base and top sizes will allow grass to exist under the muchroom caps and still prevent the mushroom caps from intersecting. This is demonstrated in the included example .ESM/.ESP with symbolic grass and trees.
2.7 Prepare Your Object Bitmaps
Object bitmaps are created the same way as the elevation bitmaps. They are also 24-bit bitmaps that are 3328x3328 pixels, and treated as grayscale. There typically will be one object bitmap for each object in the object index file. The value of the color in these bitmaps (0 - 255) determines the probability of the associated object occurring at that location. Think of it as "painting objects," where more will occur in the brighter areas, and less in the darker. There will be times when you'll need to be fairly precise when painting objects. It is simple but skill and care will produce better results.
2.8 Render the .ESP and Test In-Game
Once you have created your elevation and object bitmaps, your objects, and your object index file, you are ready to create your .ESP and test it. Enter all the appropriate values into Littoral, click the Create Landscape/ESP button, and wait. If you are creating objects, you will notice Littoral can take a long time to finish. You can reduce this by specifying that objects only be created within the specified boundary for testing purposes. If you consider the bottom-left pixel in your bitmaps as (0,0), and the top-right pixel as (3327,3327), you can specify a rectangular region in the Confine Objects to Vertices field in which to create objects. This will greatly decrease render time.
When Littoral has finished, move the .ESP and .ESM if necessary to your Morrowind\Data Files folder. Make sure all the .NIF files for your objects are in the Morrowind\Data Files\Meshes folder, and select the .ESP in Morrowind.
3.0 General Tips
Experiment with the provided examples.
Learn to effectively use a tech's paint program or Photoshop.
Be conservative when generating objects. Too many objects will break Morrowind's back.
Use level of detail in your 3dsmax scenes when used as objects (in the 3dsmax help file).
Learn and use all available selection methods and tricks in your paint program of choice.
Digital Elevation Model (.DEM) files are great sources when building your elevation bitmaps.
4.0 Limitations
4.1 Does Not Create Surface Normals
Littoral does not create surface normals for the landscape. This means that the landscape is shaded as if each polygon were facing the same direction. In order to create the proper shading for the landscape an easy trick may be used. Simply open the .ESP generated by Littoral in the Construction Set. When a texture is applied to a cell, even to one tile within that cell, the Construction Set automatically calculates the surface normals for the entire cell. Resave the .ESP or save to a separate .ESP and you will see a huge difference in-game. This must eventually be done for each cell in the .ESP, which any good modder would naturally be doing anyway. I recommend using a temporary texture that really stands out, like a solid purple, to replace _land_default.dds. This will ensure, if you so choose, that eventually every tile in every cell has been manually textured.
4.2 Is Not Idiot-Proof
Littoral was created primarily for myself as a developer tool. As such it is anything but idiot-proof. Entering parameter values that are outside their range will probably crash the program. It is not meant to be hit or otherwise abused, and is extremely inefficient. My singular priority was that it work, not be efficient or friendly to weak systems.