Open main menu

UESPWiki β

UESPWiki:Skyrim Map Design

< UESPWiki: Maps

This article covers various aspects of the design of Skyrim maps for use on UESP.

Interior MapsEdit

Local maps for cells can be created with the Creation Kit via World->Create Local Maps in .dds format. The resolution required to generate each map will vary, as the zoom levels change from one map to the next. A completely consistent image size will therefore be virtually impossible to achieve, though an estimate of the resolution required can be figured out by first exporting at a target resolution of 512, then re-exporting after seeing how much the image needs to be scaled to produce a suitable resolution. A good target resolution is about 800 to 1000 pixels in the map's largest dimension, factoring in any necessary rotation.

Before proceeding, check the map for missing sections. For unknown reasons, perhaps related to low-memory issues or bulk exporting, sections of the map will occasionally be missing from the file. Re-exporting or changing resolutions seems to correct the issue in most cases.

Once the initial export is complete and correct, the DDS file will need rotating, cropping, and conversion to JPG format. The proper in-game rotation necessary can be found by looking for the NorthMarker object in the cell. In the Creation Kit, this will be listed in degrees as the Z-rotation for the marker. In the game data, it is the REFR with a NAME field of 0x00000003; the DATA field consists of 6 floats, the last being the needed rotation in radians (counterclockwise).

Finally, after uploading the map to UESP, add it to the relevant page(s) and use the {{Image Mark}} template to add door markers and points of interest to the map.

If you are a beginner at working with maps and the Creation Kit consider following our map tutorial.

World MapsEdit

It would appear that these are done the same way as they were for Oblivion [1]

See AlsoEdit

Interior Maps Status ReportEdit

So which interior map should you work on? Click [show] on the list below and pick any map that does not already have an Uploaded File Name. Caution: This is a temporary section which will be replaced by the appropriate category page(s).

The status codes are:

  • <blank> = no map has been uploaded onto the wiki
  • skip = the cell is too small or too simple to need a map
  • uploaded = the map has been saved but not placed on its wiki page
  • on page = a map has been added to the page usually in its own == Map == section
  • intermixed = a map has been added and mixed in with the text explanation
  • pogged = a map has been added with pogs positioned on points of interest, may or may not be intermixed.

Please remember to upload your map following this format, watching for spaces, caps and hyphens:

SR-map-<whatever is the in-game Name>.jpg

If the file is named "My really cool map of where those Glen Moril Witches hide.png", somebody else may also do the same map! If their name follows the correct format, their map will be used and yours will be lost among the thousands of uploaded files. We have already had 10 duplicated maps.

Last updated: July 3, 2013 There are about 509 possible interior maps remaining. We hope that all test cells, holding cells, and non-existent pages have been excluded. If items on the list are removed, the list will not be renumbered to reflect their removal. So, for example, 395 will always be the Riften's Mistveil Keep which should make editing easier.

Annotating Interior MapsEdit

The preferred method for annotating interior maps is pogging.

What is Pogging?Edit

Pogging is placing little round colored dots onto a map in order to annotate it. Click the [show] below each map to see an example:

 
Goldenglow Estate Main Floor
 
Goldenglow Estate Second Floor
 
Goldenglow Estate Basement
 
Goldenglow Estate Sewer

How do you do pogging?Edit

One MapEdit

When formatting just one pogged map on a UESP page it can be done using just one Perk Tree. A Perk Tree uses three Templates,

  1. {{Perk Tree Setup}},
  2. {{Perk Tree}} and
  3. {{Image Mark}}.

The template, Perk Tree Setup, has three parameters, and needs to be called once before the Perk Tree itself. It can then be called prior to any image mark to change the pog color (they are limited to Yellow, Red, Green, Blue, White, Orange and Black.) In this example, the pogs will be placed on a picture 384 pixels wide; each pog has a width of 12 pixels; and each is colored yellow.

Example:
{{Perk Tree Setup|width=384|mark_width=12|mark_color=yellow}}
Note: There is no known way to change the shape of the pog.

The template, Perk Tree has 5 parameters. The first is the pogged map's caption which includes the {{PAGENAME}} template and a very short descriptive phrase. The second is the file's name as saved using the UESP convention: <name space>-map-<in-game name>.jpg. The third can be used as a description by the page author. The forth is the alignment within the cell. The fifth parameter is Perks=, which marks the beginning of a list of Image Marks (called pogs) to be placed on the map.

Example:
{{Perk Tree|label={{PAGENAME}} Map|SR-map-Goldenglow Estate Main Floor.jpg|Map of Goldenglow|left|perks= (then a list of Image Marks.)

The template, Image Mark has 5 parameters. The first is the x= position on the map for the pog; the second, the y= position. Actually finding the x and y values for the pog is a process of trial and error. The third, label= is the on screen name for the pog. The fourth is mark_alt= followed by text which further describes the pog's importance but only appears on a mouse roll-over of the pog. The fifth is the location of that text with respect to the pog, usually at the bottom.

Example:
{{Image Mark|x=950|y=550|label=Exit to island shore|mark_alt=Secret sewer entry near north shore|position=bottom}}

Here is how the three are used in combination for a single map.

(You can copy this code, paste where needed, and replace the blanks.)   Click [ Show ]   >  >  >
 <!-- some values conventionally used throughout the site are already filled in, replace the blanks   --->          
{{Perk Tree Setup|width=384|mark_width=12|mark_color=__________ }}                                   
{{Perk Tree|label={{PAGENAME}} Map|SR-map-__________________.jpg|comment|left|perks=
 <!--- List of places (please leave a comment about what place you are pogging in the list)           --->
 <!---   PLACE 1  (replace this with the name of the place)                                           ---> 
  {{Image Mark|x=___ |y=___ |label=__________ |mark_alt=______________ |position=______________ }}
 <!---   PLACE 2  ---->
  {{Perk Tree Setup|width=384|mark_width=12|mark_color=__________ }} <!-- Only needed to change color --->
  {{Image Mark|x=___ |y=___ |label=__________ |mark_alt=______________ |position=______________ }}
 <!---   PLACE 3 ---->
  {{Perk Tree Setup|width=384|mark_width=12|mark_color=__________ }} <!-- Only needed to change color --->
  {{Image Mark|x=___ |y=___ |label=__________ |mark_alt=______________ |position=______________ }}
 <!---   PLACE 4 ---->
  {{Perk Tree Setup|width=384|mark_width=12|mark_color=__________ }} <!-- Only needed to change color --->
  {{Image Mark|x=___ |y=___ |label=__________ |mark_alt=______________ |position=______________ }}
 <!--- and so on, for however many places are considered important: entries,  treasures, bosses, etc. --->
 <!--- or delete entries if fewer than 4 places --->
}} <!--    END of Perk Tree's list  :    leave no blank lines between entries, comments are ok        --->
Multiple MapsEdit

When formatting more than one map on a UESP page, we will be inserting things into a larger table. The larger table allows for pogging several maps, but four is as many as you can display in any one row. Each map thumb nail version has its pogged version below and so requires two rows in the larger table. So twelve maps would require six rows. Our discussion will assume four maps, requiring only two rows.

The first row of this larger table will call in each map and display it in a thumb nail version. The second row of this larger table will contain small collapsible tables, one for each map, in order to display the annotated map below its thumb nail version. Each entry in this second row uses the class and the three UESP templates below to annotate the map:

  1. class="wikitable collapsible collapsed"
  2. {{Perk Tree Setup }}
  3. {{Perk Tree }}
  4. {{Image Mark }}

The class above declares a wikitable that is collapsible and starts out collapsed. The collapsible table here has 1 column with 4 rows.

1st row |-  blank
2nd row !   holds the<name of the hidden map> that precedes the show/hide button like this --->   [show].
3rd row |-  blank
4th row |    holds Perk Tree Setup followed by the Perk Tree which contains the list Image Marks.
Here is a schematic for the relationship between the larger table and the four collapsible tables that form its second row.   Click [ Show ]   >  >  >
Larger Table
Thumb Nail 1
Thumb Nail 2
Thumb Nail 3
Thumb Nail 4
Collapsible Table
blank
map name 1 & [show]
blank
perk tree setup + pogs
Collapsible Table
blank
map name 2 & [show]
blank
perk tree setup + pogs
Collapsible Table
blank
map name 3 & [show]
blank
perk tree setup + pogs
Collapsible Table
blank
map name 4 & [show]
blank
perk tree setup + pogs

Goldenglow Estate is an example of the use of this style for multiple maps. You could edit that page, copy the pogging code there, and then paste it into the page you are working on. Finally, you would make the appropriate changes and save.

Why do pogging?Edit

In general, pogging is much preferred, since the pogs, their positions and titles can be altered or eliminated by any editor editing the page while keeping the original map intact. Furthermore, they need not resort to a graphics program, uploading a new image and then requiring the site to maintain a previous version the last of which uses more space than a pog edit.

Cell Resource Map NotesEdit

This section provides details on implementing an overlay showing the counts of various cell resources (plants, ore, etc...).

Database DesignEdit

A new table will be created within the sr_map_data database with the following structure:

    CREATE table cellresource (
        formid INT PRIMARY KEY NOT NULL, -- primary key
        name TEXT NOT NULL,
        editorid TEXT NOT NULL, 
        data TEXT NOT NULL
    );
    CREATE INDEX cellresource_editorid_index ON cellresource(editorid(24));

Most of the fields should be self-explanatory. The data field is a JSON string holding a 2-dimensional array of integers of the counts of the resource in each cell. The size of the array should be identical for each resource as defined by the map code.

Coloured Map NotesEdit

The following are some development on various options of creating a coloured Skyrim map.

CK Create Local MapsEdit

The current grey scale map was created using this feature. There is no known explanation why the map images have no color and there doesn't appear to be any options to enable it. There is also the issue of many map cells being exported partially or fully black for no known reason.

CK Map CaptureEdit

The option uses the render window of the Creation Kit to capture coloured map images. The basic process is:

  • Open skyrim.esm in the CK
  • Use the Cell View dialog to open a Tamriel cell of a specific X/Y coordinate
  • Enable/disable cell borders as needed using 'B'
  • Disable perspective using '0'
  • Choose a top camera view using 'T'
  • Disable markers using 'M'
  • Choose the time of day as noon (although 3 pm appears to give better shadows and contrast)
  • Enable/disable sky lighting using '6'
  • Enable/disable bright lights using 'A' (the bright light color can be adjusted in preferences as needed)
  • Capture the image using Prt-Scrn or an image capture software
  • Split the capture map image into individual cells and resize each to 256x256 pixels
  • On a large screen (1920x1080) up to 15 cells (5x3) can be captured at a time (or 5x1 with 512x512 cell resolution to be split into 4 256x256 tiles)
  • Note: On a multiple monitor setup the render view can be resized across the entire virtual screen. For example on dual 1920x1080 monitors I can view/capture 11x3 cells displayed at a time which increases the manual efficiency a good amount. The editor preferences can be adjusted to set how many cells to load at a time (in the Misc tab under Grids to Load).

While this method has the capability of capturing high quality map images there are a number of issues:

  • When changing cell location there are often strange clipping issues. This can be fixed by selecting an object in the new cell and pressing 'T' but this resets the map zoom scale.
  • This appears to be due to the perspective camera's position being reset after each cell load and the orthographic camera linked to its view frustum. It can be fixed by the following:
  • Adjust the orthographic camera to the desired zoom level.
  • Change the cell position in the cell view window.
  • Switch to the perspective camera using '0'
  • Zoom out a far distance (the camera preferences can be edited to zoom out faster)
  • Switch back to the orthographic camera using '0'
  • If you zoomed out far enough the world display should be normal
  • Markers have to be re-enabled and then disabled after moving to a new cell.
  • This appears to be simply due to new cells ignoring the current state of the marker enable status. Toggling the marker display twice resets things.
  • Cell load is not instant: Objects are loaded asynchronously and pop into view gradually. Depending on the number of objects in the cells loading 5x3 cells takes anywhere from 1 to 60 seconds.
  • Some objects (like acoustic spaces, actors, and cameras) remain visible and cannot be hidden. Acoustic spaces in particular mess up the map display considerably and would have to be deleted.
  • This appears to be the same issue as the marker issue noted above. Toggling the marker display status twice via 'M' hides most things.
  • The only objects which cause an issue are actors and wave? types.
  • The actor markers are small and relatively minor and might be "hidden" by manually changing the NIF file for the actor marker.
  • The wave? markers are seen mostly along the northern shoreline and are infrequent and large enough to be manually deleted.
  • It is difficult/impossible to keep a constant view when changing cells which makes a subsequent automatic splitting of the image into individual cell images difficult/impossible.
  • This has been solved. The perspective camera does reset when you change cells but the orthographic camera remains constant.
  • This method is not easily automated. It may be possible by using a custom program that sends keyboard and mouse events directly to the CK windows.
  • It is possible although it is very much a "hack" and extremely fragile. A mostly automatic process with minor manual intervention is readily possible.
  • Assuming 15 cells can be captured at a time at a resolution of 256x256 that still leaves some 600 screen captures to perform. If done entirely manually at 1 minute per screen capture this would take 10 hours of continuous capture (not counting having to split the screen captures).
  • Splitting of the work between multiple people would help since the process is made easily parallel by assigning cell ranges.
  • Water display is somewhat different depending on its position on the screen (due to sky reflection I assume). You can use SHIFT-W to enable/disable the water plane which makes it possible to capture two identical screenshots, one with water and one without, and do post-processing to add any style water effect that is desired.
  • This is mostly resolved and due to the perspective camera being reset after a cell change. Once you zoom the perspective camera out a far distance the water is a mostly constant light-blue colour in the orthographic camera.
  • The CK tends to consume memory and never release it (memory leak?) until it crashes shortly after passing 2GB private working set.
  • This is not as big of a problem as when outputting the local maps. You can load and capture several sets of all cells without any noticeable issues (CK memory usage goes up just above 3GB but doesn't crash).
  • The render view does not display perfectly square or regular cells in the orthographic camera. The cells are almost square (e.g., 305x297) and there may be a 1 pixel size variation in each direction depending on the exact zoom level and the position of the cell in the render view.
  • You can manually tweak the zoom level to be the same from session to session.
  • There are some SkyrimEditor.ini and CK Preference tweaks you need to make to help the map capture process:
  • Set uGridsToLoad=7 assuming a 5x1 output area. Ideally make it two larger than your maximum output length/width to have one cell padding on each side.
  • Increasing uExterior Cell Buffer may help keep more loaded cells in memory.
  • Set bBlockMessageBoxes=1 to disable all CK warning message boxes.
  • bAllowMultipleMasterLoads=1 may need to be set if loading the DLC master files.
  • Set the various bShow... in the [MAIN] section, some of which seem to have no matching setting in the CK.
  • Set all the bUseWaterReflections... in the [WATER] section to 0.
  • bUpdateRenderWindowWater=0, bUseRefractionShader=1
  • bDoStaticAndArchShadows=0, bDoActorShadows=0, bDoCanopyShadowPass=0, bDrawShadows=0
  • Set SResourceArchiveList2=Skyrim - Shaders.bsa, Update.bsa, DragonBorn.bsa, Dawnguard.bsa, HearthFires.bsa if loading the DLC data.
  • Cell display is not correctly updated when changing cells.
  • Water initially shows a dark reflection in the center and is partially translucent.
  • High landscape and objects are clipped.
  • The cell display needs to be reset 1 or 2 times in order for these display issues to be fixed.
  • A "reset" in this case is pressing "0" twice to switch from non-perspective to perspective and back and pressing "M" twice to hide all markers.

In order for this option to be made viable a more automated capture and cell splitting process has to be come up with.

Map Creation ProcessEdit

Most of the significant initial difficulties with this technique have been solved which permit map tiles to be created with a mostly automatic and partial manual process detailed as follows:

  • Create a custom program capable of the following:
  • Find the CK render window handle.
  • Find the CK cell view window and child window handles (the X/Y edit boxes and the Go button).
  • Simulate mouse, keyboard and Windows messages using a various combination of SendInput() and SendMessage().
  • Capture the contents of a window and save to an image file. There are a few ways to do this in Windows but the easiest turned out to be activating the desired window (CK render view), simulating an Alt+PrtScrn keypress, copying the clipboard image to a GDI+ bitmap, and then manipulating and saving this to a PNG or JPG file.
  • Various macros to jump to a specific cell, set the render view to a desired setting, capture the render view and split it into individual cell images.
  • Start the Skyrim CK and load skyrim.esm and update.esm. Load any external cell in the main worldspace (Tamriel).
  • Set the time to 15:50 (or any desired time but it should remain constant for one complete map tile export).
  • Similarly, play with the various render display options to get the desired effect. Best combination I've found is sky on, bright light off.
  • Tweak the orthographic camera zoom level and the render window size to get the split cell images to come out perfectly aligned along the cell boundaries. Turning on cell borders using 'B' is very helpful during this stage. Record the settings as the CK may need to be restarted several times during the map tile creation process.
  • Define the cell range to export. While there are a lot of blank/empty cells around the content they export quickly. I use (-57,-43)-(61, 45).
  • Start the export process.
  • Jump to the appropriate cell in the custom macro program.
  • Ensure the cell is actually loaded/updated in the CK (sometimes it doesn't properly update and you manually have to hit Go in the cell view window).
  • Wait for the cells to load and display (may take up to one minute).
  • Refresh the render view display using the custom macro program.
  • Assuming everything looks fine hit the capture in the custom macro program. The time to capture and save two sets of map tiles (with water and without) takes less than 2 seconds.
  • Repeat for the next set of cells.
  • Once all cell tiles are exported check for missing images and re-export as needed.
  • Assuming no issues you should have a complete set of 256x256 coloured map tiles for zoom level 16. Create the smaller zoom levels as one normally would for the maps and upload.


CK SetupEdit

Basic setup for the CK for automatic map capture with SkyCapture:

  • Edit any INI settings as described in the previous sections.
  • Start the CK and load required master files
  • Start a new active plugin in order to save any deleted objects
  • Move to the desired worldspace
  • Resize the render window as needed to capture as many cells as possible (ideally a 512x512 cell size or larger)
  • Switch the render window to top view "T", non-perspective "0" with cell boundaries on "B"
  • Modify the zoom and render window size to obtain the top-left corner of the left-most cell near the top-left corner of the render window.
  • Capture the render window (Alt+PrintScreen)
  • Measure the cell size (include the top and left cell boundaries but not the right/bottom boundaries) and input into SkyCapture as the "Output Cell Size"
  • Measure the offset from the top and left of the image to the top/left most cell boundary (not including the boundary itself) and input into SkyCapture as the "Output Cell Offset"
  • Move to any cell with SkyCapture and do a test capture with the cell boundaries on to ensure the cell capturing and splitting is occurring correctly.
  • Turn cell boundaries off before capturing images.
  • Determine cell range to capture. While it doesn't matter too much keep in mind the zoom creation process works best with a power of 2 cell count in each direction.
  • When the CK crashes do the following to continue capturing after restarting:
  • Load the relevant master/plugin files
  • Switch to the relevant worldspace
  • Move to the last captured cell
  • Switch to non-perspective mode "0"
  • Turn on cell boundaries "B"
  • Zoom in/out to achieve the correct zoom factor (capture render window image and re-measure cell size/offset if desired)
  • Turn cell boundaries off with B"

In-Game Map CaptureEdit

By using console commands the game itself can be used to capture map images of good quality. The basic process is:

  • Start a vanilla Skyrim game (perhaps with a seamless cities mod)
  • Initialize the game using the following console commands:
  • tgm
  • tcl
  • setfog 10000000 100000000
  • set timescale to 0
  • set gamehour to 12
  • tb
  • fw 0010E1F2
  • To capture a specific cell use the following console commands
  • cow Tamriel [CellX] [CellY]
  • (wait for location to load)
  • player.setpos x [CellX]*4096+2048
  • player.setpos y [CellY]*4096+2048
  • player.setpos z 50000
  • player.setangle x 90
  • player.setangle y 0
  • player.setangle z 0
  • fov 10
  • Use the tm console command to hide the game menus and then capture the screen
  • One or more console batch files can be used to streamline this process but the screen capture must remain manual.
  • A custom program can be used to send keystrokes to Skyrim to achieve the same effect in addition to permitting automatic screenshot capture by sending the Prt-Scrn key.

This method can create good quality and full colour map images but has a number of issues:

  • The map images have perspective so are not constant in size (tall mountains appear larger) and do not have straight edges. This effect can be minimized by using a larger z-position and a smaller FOV but there is an upper z-limit of 300000 after which everything is clipped and if you go over 50000 the water shorelines do not look very good.
  • The custom program that sends keystrokes to the game to automate this process works but is fragile due to the asynchronous nature of the game. Cell loads take an arbitrary time to complete and any random game/OS pauses can result in the "corruption" of the console command being sent.
  • To further complicate matters when playing Skyrim you cannot use any global Windows hot key which would be useful in starting/updating/stopping the automated map capture process.
  • The variable size of the cells in the map images means an automated map image celling procedure is not possible.

While this method looks promising there are still multiple issues to work through, the main one being due to the perspective view of the map within the game.

Water Post-ProcessingEdit

By capturing two sets of map tiles from the CK, one with water and one without, we can do a variety of post-processing to choose how water appears. There are a variety of methods but we'll be using the command line ImageMagick for the following procedure:

  • Note that PNGs work better than JPGs as the source images.
  • Assume regular map tile image is maptile.jpg and no-water version is nowater.jpg.
  • Create a base image to use as the water
    convert -size 256x256 canvas:'#00336699' watercanvas.png
This is a one time operation and the color/opacity of the water can be adjusted as needed.
  • Create difference from the two images:
    convert maptile.jpg nowater.jpg -compose difference -composite diff.jpg
  • Turn the difference image into a black&white mask with some blurring:
    convert diff.jpg -threshold 10% -blur 0x2 mask.jpg
The threshold and blur level can be adjusted a bit as needed.
  • Combine the nowater, mask and water canvas into the final image:
    composite watercanvas.png nowater.jpg mask.jpg finalmap.jpg
  • See example inputs and output using the previous commands below:
     
  • Other examples of commands for different water effects:
  • Using a more transparent canvas with color #00336666:
 
  • Using a small blur for the water from the previous image using the following commands:
       convert finalmap.jpg -blur 0x1 blurredwater.jpg
       composite blurredwater.png finalmap.jpg mask.jpg finalmap1.jpg
 
  • Using a less transparent canvas with color #336699cc:
 
  • An alternative method doing the processing in one command is:
       convert nowater.png watercanvas.png \ 
               \( maptile.png -clone 0 -compose difference -composite -colorspace HSL -channel B -threshold 6% -colorspace RGB -channel ALL,sync -blur 1x1  \) \
              -compose over -composite output.jpg
This has a better mask creation method that has less chance of the underwater ground "bleeding" through and water appearing incorrectly on the regular ground (see old and new final images below). It is also about twice as fast due to not having to save and reload intermediate images in multiple steps.
   

Alternate Water ProcessingEdit

The previous water processing doesn't seem to work well for the Dragonborn map tile set as there is no threshold value that works for all tiles. Instead, you can do a more simple combination of the water and nowater tiles using a set opacity on the nowater tiles like:

    convert ./test/nowater/$basefile -alpha on -channel a -evaluate set 50% -channel ALL $file -compose overlay -composite ./test/combine/$basefile
 


Simple Map RenderingEdit

Convert the detailed colored maps to a simpler type output:

   convert input.jpg -morphology Smooth Octagon:2 output.jpg
 

Or just convert from PNG to JPG with:

   convert input.png -quality 60% output.jpg

Custom Renderer Map CaptureEdit

The most flexible option for creating any style/color of map images we can imagine but also the most complex and time consuming. The required time to develop a custom renderer is likely several months unless multiple developers can be enlisted, even reusing existing components as much as possible.