Map development

From Spring
Jump to navigationJump to search

Development < Map development

Getting Started (Tools)

Blueprint: https://github.com/jk3064/Map-Blueprint 

The only other tool really needed is "Mapconv". The other tools available are there simply to make your life easier. A list of common mapping tools are as follows:

Mapconv

SMFED (Depreciated, no longer useful)

Grout (Depreciated, no longer useful unless texture was generated with L3dt utilizing tiles)

SMD Creator (Depreciated, no longer useful)

Start Position Editor

Das Bruce's Mapconv frontend

These tools have been compiled into a zip available here: http://springfiles.com/spring/tools/mapping-tools

Keep in mind that mapconv is still being developed, so it may be necessary to update the included Mapconv to a later version, located here: http://springrts.com/phpbb/viewtopic.php?f=56&t=21458

The Components of a Map

Texture Map

Heightmap

Metal Map

Feature Map

Compiling a Map (MapConv)

Texture Specifications

Texture map size is related in pixels and in spring map size. 2x2 MapSquares in spring are equal to 1024x1024 Pixels. Texture maps must be in multiples of 2. I.E. 2x2, 6x10, 12x16, 16x16, etc. No odd sizes are allowed (Example: 15x10).


Height Map dimensions are Texture Map size / 8 + 1 pixel. In other words, if your texture map is 8192x8192 (16x16), 8192 / 8 + 1 = 1025x1025


Metal Map dimensions are Texture Map size / 8 + 1 pixel. In other words, if your texture map is 8192x8192 (16x16), 8192 / 8 + 1 = 1025x1025


Feature Map dimensions are Texture Map size / 8. In other words, if your texture map is 8192x8192 (16x16), 8192 / 8 = 1024x1024

Using MapConv

MapConv is a command line program that is generally started via a batch file .

Below is an example set of parameters given to mapconv:

MapConv -i -l -c 0 -x 101 -n 100 -o EvoRTS-Craggy_Creek-v01.smf -t terrain.png -a height6.png -m metal.png -f feature.png -z "nvdxt.exe -dxt1a -nmips 4 -Sinc -quality_highest -file"

Once compiled, you will get 2 new files: <mapname.smt> and <mapname.smf>

Utilizing Blueprint

Unzip the blueprint archive into your Spring Maps folder.

mapcontainer.jpg

You will notice a new folder called "mapcontainer.sdd". The .sdd ending on the folder name is very important for testing as <foldername>.sdd tells spring to load map files from that folder. This way you can work on your maps without having to zip them up over and over again.

mapcontainer.sdd

Inside the map container folder you have the following file/folder structure.


LuaGaia
mapconfig
maphelper
maps
mapinfo.lua
mapoptions.lua

Now, copy your compiled map files into the "maps" folder.

Texture Splatting using SSMF

SSMF mapping is adding detail textures all over the map based upon specified distribution areas. This will make your map infinitely more detailed and beautiful.

Adding SSMF to a map consists of the following steps:

Distribution Map

Detail Textures

Specular Map

Grass Shading Map

Placing Features

As previously mentioned, features can now be placed via LUA based upon a coordinate system that looks similar to this:

local features = { 
unitlist = {
},
buildinglist = {
},
objectlist = {
{ name = 'btreeclo_4', x = 7760, z = 112, rot = "0" },
{ name = 'btreea_3', x = 2520, z = 6904, rot = "0" },
{ name = 'btreeblo_5', x = 7736, z = 536, rot = "0" },
{ name = 'btreeclo_1', x = 2504, z = 7112, rot = "0" },
{ name = 'geovent', x = 177, z = 192, rot = "0" },
},
}
return features

Of course, features can be placed by editing the set.lua file in a text editor, but that would take an extremely long time. Enter FeaturePlacer.

Feature Placer

Feature Placer

Configuring Map Parameters (Mapinfo.lua)

Admittedly, the default values used in blueprint mapinfo are awful. It may be wise for you to download another map that has used blueprint and copy and paste it's mapinfo contents into yours. However, you are also free to use the default or use the provided example.

In time, the mapinfo tags will be documented and this will like to that page. As it is the tags and values are pretty easy to figure out for the most part.



-- mapinfo.lua --

local mapinfo = { name = "EvoRTS - Craggy Creek -", shortname = "", description = "", author = "", version = "v09", --mutator = "deployment"; --mapfile = "", --// location of smf/sm3 file (optional) modtype = 3, --// 1=primary, 0=hidden, 3=map depend = {"Map Helper v1", "Spring Features 1.0"}, replace = {},

--startpic = "", --// deprecated --StartMusic = "", --// deprecated

maphardness = 800, notDeformable = false, gravity = 130, tidalStrength = 0, maxMetal = 1, extractorRadius = 150, voidWater = false, autoShowMetal = true,


smf = { minheight = -100, maxheight = 900, --smtFileName0 = "", --smtFileName1 = "", --smtFileName.. = "", --smtFileNameN = "", },

sound = { --// Sets the _reverb_ preset (= echo parameters), --// passfilter (the direct sound) is unchanged. --// --// To get a list of all possible presets check: --// https://github.com/spring/spring/blob/master/rts/System/Sound/EFXPresets.cpp --// --// Hint: --// You can change the preset at runtime via: --// /tset UseEFX [1|0] --// /tset snd_eaxpreset preset_name (may change to a real cmd in the future) --// /tset snd_filter %gainlf %gainhf (may " " " " " " " " ) preset = "default",

passfilter = { --// Note, you likely want to set these --// tags due to the fact that they are --// _not_ set by `preset`! --// So if you want to create a muffled --// sound you need to use them. gainlf = 1.0, gainhf = 1.0, },

reverb = { --// Normally you just want use the `preset` tag --// but you can use handtweak a preset if wanted --// with the following tags. --// To know their function & ranges check the --// official OpenAL1.1 SDK document.

--density --diffusion --gain --gainhf --gainlf --decaytime --decayhflimit --decayhfratio --decaylfratio --reflectionsgain --reflectionsdelay --reflectionspan --latereverbgain --latereverbdelay --latereverbpan --echotime --echodepth --modtime --moddepth --airabsorptiongainhf --hfreference --lfreference --roomrollofffactor }, },

resources = { grassBladeTex = "grassbladetex.bmp", --grassShadingTex = "grassshading.bmp", --detailTex = "", specularTex = "specularmap.bmp", splatDetailTex = "splattex.tga", splatDistrTex = "splatdistribution.tga", --skyReflectModTex = "", --detailNormalTex = "detailtex.bmp", --lightEmissionTex = "", },

splats = { TexScales = { 0.006, 0.006, 0.006, 0.0005 }, TexMults = { 0.3, 0.3, 0.2, 0.1 }, },

atmosphere = { minWind = 1.0, maxWind = 30.0,

fogStart = 0.7, fogEnd = 1.0, fogColor = {0.8, 1, 1},

sunColor = {1.0, 1.0, 1.0}, skycolor = { 0.1, 0.15, 0.7 }, skyDir = {0.0, 0.0, -1.0}, skyBox = "",

cloudDensity = 0.5, cloudColor = {1.0, 1.0, 1.0}, },

grass = { bladeWaveScale = 1.0, bladeWidth = 0.5, bladeHeight = 6.0, bladeAngle = 1.57, bladeColor = {0.59, 0.81, 0.57}, --// does nothing when `grassBladeTex` is set },

lighting = { --// dynsun sunStartAngle = 0.0, sunOrbitTime = 1440.0, sundir = { 0, 0.50, -1 },

--// unit & ground lighting

        groundambientcolor            = { 0.8, 0.8, 0.85 },
        grounddiffusecolor            = { 1.0, 0.9, 0.8 },
        groundshadowdensity           = 1.3,
        unitambientcolor           = { 0.5, 0.5, 0.5 },
        unitdiffusecolor           = { 1.0, 0.9, 0.8 },
        unitshadowdensity          = 0.8,

specularsuncolor = { 0.6, 0.7, 0.9 },

specularExponent = 100.0, },

water = { damage = 0.0,

repeatX = 0.0, repeatY = 0.0,

absorb = { 0.05, 0.05, 0.05 }, basecolor = { 0.5, 1, 0.5 }, mincolor = { 0.1, 0.1, 0.10 },

ambientFactor = 1.0, diffuseFactor = 1.0, specularFactor = 1.0, specularPower = 20.0,

planeColor = {0.0, 0.5, 0.0},

surfacecolor = { 0.5, 0.9, 0.5 }, surfaceAlpha = 0.1, diffuseColor = {1.0, 1.0, 1.0}, specularColor = {0.8, 0.7, 0.65},

fresnelMin = 0.2, fresnelMax = 0.8, fresnelPower = 4.0,

reflectionDistortion = 1.0,

blurBase = 2.0, blurExponent = 1.5,

perlinStartFreq = 8.0, perlinLacunarity = 3.0, perlinAmplitude = 0.9, windSpeed = 1.0, --// does nothing yet

shoreWaves = true, forceRendering = false,

--// undefined == load them from resources.lua! --texture = "", --foamTexture = "", --normalTexture = "", --caustics = { -- "", -- "", --}, },

teams = { [0] = {startPos = {x = 7779, z = 2147}}, [1] = {startPos = {x = 353, z = 1982}}, },

terrainTypes = { [0] = { name = "Default", hardness = 1.0, receiveTracks = true, moveSpeeds = { tank = 1.0, kbot = 1.0, hover = 1.0, ship = 1.0, }, }, },

custom = { fog = { color = {0.26, 0.30, 0.41}, height = "80%", --// allows either absolue sizes or in percent of map's MaxHeight fogatten = 0.003, }, precipitation = { density = 30000, size = 1.5, speed = 50, windscale = 1.2, texture = 'LuaGaia/effects/snowflake.png', }, }, }



-- Helper

local function lowerkeys(ta) local fix = {} for i,v in pairs(ta) do if (type(i) == "string") then if (i ~= i:lower()) then fix[#fix+1] = i end end if (type(v) == "table") then lowerkeys(v) end end

for i=1,#fix do local idx = fix[i] ta[idx:lower()] = ta[idx] ta[idx] = nil end end

lowerkeys(mapinfo)



-- Map Options

do local function tmerge(t1, t2) for i,v in pairs(t2) do if (type(v) == "table") then t1[i] = t1[i] or {} tmerge(t1[i], v) else t1[i] = v end end end

getfenv()["mapinfo"] = mapinfo local files = VFS.DirList("mapconfig/mapinfo/", "*.lua") table.sort(files) for i=1,#files do local newcfg = VFS.Include(files[i]) if newcfg then lowerkeys(newcfg) tmerge(mapinfo, newcfg) end end getfenv()["mapinfo"] = nil end



return mapinfo



SSMF Mapmaking Tutorial (Using JK's Blueprint)

*A Note to wiki Editors*

The below listed tutorial needs to be pulled apart and separated into proper pages following an outline, making it much easier for future addition and proper documentation separation.

Creating a Map using Blueprint

Skyboxes


Mutators

Mutators are files that add new content to exiting game files. "Spring Features" is an example of a mutator.

This section needs a proper description.

http://springrts.com/phpbb/viewtopic.php?f=13&t=21808

Tools

  • Frostregen's SpringMapEdit. 3D editing, Compiles and import SM2 directly. Beginner friendly but still powerful.
  • MapConv Map converter program, compiles maps.
  • MapConvNG Rewrite of MapConv that works on linux / 64 bit.
  • Maps:Map Designer (Outdated, Depreciated) Hugh's 3D map designer. Splatting, heightmap editing, splat painting, SM3
  • Starting position creator: Or you can always find out the hard way which x/y coordinates are good by starting spring and having a look at the mouse cursor coordinates.
  • Coordinate Helper widget A small widget that helps you with finding coordinates ie for start positions. Every time you put down a marker it will log its position in Infolog.txt and also in MAPNAME_coordinates.txt Helpfull if you need to get lots of map coordinates and do not want to write them down by hand. (it writes SpawnResource in front of the coordinates but you can ignore or edit the widget)

Depreciated and Outdated Map Making Documentation

Depreciated Map Making Guides