What is this?

SpringMapEdit is an application for editing the various parts of which a Spring ( map consists within a full 3D environment.

It was written in in Java, and uses SWT and JOGL.

Feature List

  • Heightmap editing
  • Texture editing
    • Paint with loaded texture (Stamp (respects texture alpha), Set, Blend (respects brush pattern))
    • Autogenerate based on height/steepness and given textures. Setup via textfiles (tdf).
  • Feature placement
    • add/remove/rotate Features
  • Typemap/Metalmap/Vegetationmap? viewing and editing. Overlay texturemap ability.
  • Slopemap viewing and exporting
  • Export directly to SM2 map format (.smt + .smf)
  • Import directly from SM2 map format (.smt + .smf)
  • Import and Export any map from various formats
    • BMP 8/24/32 bit
    • RAW 16 bit
  • Prefabs. Just place ready made Tiles into your map
    • scale/grid align/rotate



Supported Platforms:
all which support Java, SWT, and JOGL, this includes, but is not limited to:

  • Windows
  • Linux
  • OSX (needs testing. someone could supply some startup script?)


  • OpenGL 2.0 capable Graphics Card (Geforce5 and up)
  • Plenty of RAM (depending on mapsize)


If it does not startup properly, you may need to get the correct libraries for your platform, and check some dependencies SWT and JOGL have. (Especially on Linux/OSX (GTK?))


Just extract contents of this archive into any directory. Then start the appropriate script.

  • Windows: one of the "start_win32/64.bat" files.
  • Linux: one of the "start_lin_x86/" files.
  • OSX: someone needs to supply me those files. (Basically it should be the same commandline as for windows/linux)

I recently decided to remove the different startup-files for different amount of RAM. If you get crashes when editing large maps, or it does not start at all, try editing the startup file.
There is a parameter which reads like:
The 1024 is the maximum amount of RAM which Java is allowed to use. Set it to your needs, but make it a multiple of 128. If Java can not find a batch of RAM as large as given number, it won't start, so just set it a little lower than your real RAM.

Controls and Settings


Default KeyCommand
SPACEToggle Mouselook
MOUSELook around / move brush / actions
ARROWSMove around
SHIFTHold to move around faster
CTRLHold to move slower
LLock Camera Height (useful for looking down and moving with arrows)
BToggle Invert Mouse Y


Default KeyCommand
XFlatten Heightmap to given height (Uses height from "HeightBrush" in "Set" mode)
CRandomize Heightmap (use Smooth afterwards for something useful)
EHydraulic Erode Heightmap
TThermal Erode Heightmap
PConvert heightmap into 15 discrete heightlevels (terracing)
SSmooth complete Heightmap
F8Quicksave into RAM
F12Quickload from RAM
Z/YBlank Texture
GAutogenerate Texture (Currently only customizable by tdf. Needs a good GUI...)
F1View Slopemap
F2View Typemap
F3View Vegetationmap
F4View Metalmap
F5View Texturemap
F6Blend Texturemap into other Views


Default KeyCommand
QToggle "nice Shader Water"
WWireframe mode
RToggle "View complete Map"
U/Idecrease/increase clipping distance when "View complete Map" is disabled
+/-(NOT on Numpad!) decrease/increase view distance when "View complete Map" is disabled
OToggle Terrain LOD
DToggle "use VBO instead of DisplayList" Setting
FToggle Texture filtering
HToggle Lighting
NToggle "Smooth Normal Calculation"
MToggle "faster smooth Normal Calculation"
VToggle "Feature lighting"

Settings are stored within:
config/keys.cfg and

Some of those settings are not customizable within the GUI, so you may wish to alter these files directly.


VariableDefault ValueDescription
quadSize2size of one tile in openGL units. Do not modify, needs to be in sync with spring.
displayWidth1024initial window width
displayHeight768initial window height
featureTexSize128size of feature selektor buttons
prefabSize32TileSize for PrefabSelector. Prefabs will be scaled down to this width.
fov60.0initial fov
renderRadius128Key: +/-
farClip200Key: U/I
renderAlltrueKey: R
smoothNormalstrueKey: M
maxBlocksPerFrame1How many geometry-blocks will be updated each frame
maxTexturesPerFrame1How many texture-blocks will be updated each frame
maxFeatureBlocksPerFrame1How many feature-blocks will be updated each frame
maxFeaturesPerFrame1How many features will be loaded each frame
fancyWaterfalseKey: Q
useLightingtrueKey: H
waterMapExtend200How far the water will extend beyond terrain
onlyOutlineBrushtrueIf Brush will be solid, or outlined. (If set to false could impact performance)
compressTexturestrueIf textures will be compressed (affects only Texturemap&Features)
fastNormalsfalseKey: N
maxFeaturesToDisplay10240Maximum number of features that will be rendered
alwaysReRendertrueAlways render the full scene, despite nothing changed
renderFullspeedtrueRender fullspeed, despite nothing may change between world updates
featureLightingfalseIf Features recieve lighting, or not
renderFeatureLOD3Last Terrain-LOD which will show features
noLODfalseDisable LOD
useVBOtrueKey: D
outputPerfDebugfalseOutput performance debugging info
blockSize64block size in tiles. MUST be 2n. Smaller values reduce block updating time(while editing), while large values increase rendering performance
mouseLookfalseKey: SPACE
invertYtrueIf Y-Axis is inverted while Mouselook is active
sensitivity5.0Mouse sensitivity while looking around
slowSpeed1.0Slow movespeed (CTRL)
normalSpeed8.0Normal movespeed
fastSpeed16.0Fast movespeed (SHIFT)
lockCameraYfalseif camera height is locked
animateGUItrueif Features and Prefabs should rotate inside their Selectors
keepBruhesInRamtrueif Brushes (Patterns, Textures, Prefabs) should be kept in RAM, or be reloaded from Disk on selection
compressQuicksavefalseif quicksaves should be compressed into RAM. Should only be used if RAM is low.
dialogAlwaysOnToptrueif dialog is always on top
quitWithoutAskingfalseif a confirmation dialog should be displayed on exit
lodDists400.0 800.0 1200.0 1600.0 2000.0 2400.0

Up to the distance of the first value, LODLevel 0 will be used,
up to the distance of the second value, LODLevel 1 will be uses and so on...


The amount of values needed here depends on blockSize. 2x = blockSize, x = needed values.
2x = 64
x = 6
6 Values needed.
If the number of values is wrong, all values will be ignored and set to a default.

If you mess up, just delete the config.
A new one will be created with proper defaults.


Basically it is just:
<keyCode> CommandIdentifier

keyCode is a mixture of modifiers and an actual keycode. Since the codes are from SWT, they do not completely correspond to ASCII. Normal letters do match, but special keys do not (F1, F2, Arrows...)

This would be SHIFT+R to execute RENDER_ALL

Modifiers are "SHIFT", "CTRL", "ALT". If used, they MUST be used in above order.

would be SHIFT+CTRL+ALT+R to execute RENDER_ALL

If something is bound to "R" and you press SHIFT+R with nothing bound to SHIFT+R, the command for R will be executed. This fallback is necessary for shift+arrow / ctrl+arrow, to work like expected.

"unbindall" is a special command which removes all previous bindings.
This is useful to get rid of the default bindings, which are always loaded before loading keys.cfg itself.

Hmm, while writing this stuff, I could have been implementing a GUI for keybindings... ;)


Adding Features

See AddingFeatures

Adding Prefabs

See AddingPrefabs

Adjusting Prefab Slope

Currently you have multiple options with SME:

  1. Brush size inside SME: If you change this, the height is unaffected, thus changing the slope.
  2. Inside tdf "Height": By changing this, you directly change the slope, without changing the size.
  3. Resize heightmap (+texturemap): This is effectively the same as 1.

This means if your Tileset keeps using the same slopes regularly, it is merely adjusting the Height value inside the prefabs tdf (or adjusting MaxHeight inside SME or inside the maps tdf).

How to disable Water when exporting to SM2?

Just set the Waterheight to -1

Why do the Sliders jump around when selecting a different Brush-Mode?

Each Brush-Mode (each SubMode? too) has its own settings, which are reflected by the Strength+Size Sliders.

When importing SM2 it complains about missing features?

If you import a map, you have to make sure all required files are available at program startup.

  • Feature definitions (.tdf) inside "features"
  • Models (.s30) inside "objects3d"
  • Textures (.tga/.dds) inside "unittextures"

This is because existing Features are only scanned once at startup. This may be subject to change if more sophisticated import is at place (import directly from sd7, take care of required files at own...).

For more info see AddingFeatures


Slow performance on Vista. I am using Aero (3D Desktop)

Maybe a driver issue, maybe something else. Turn Aero off, then it should work normally.

It crashes on startup, mentioning an external nvogl.dll.

Somehow it crashes with Nvidia 177.92 Beta drivers on my 8800GT, if "Threaded optimizations" are set to "off". (Which you may have done in respect to Spring)

It won't start up. Out of Memory problems.

See Installation

Last modified 8 years ago Last modified on Oct 9, 2009, 6:39:03 PM