A Method of Recreating Classic Total Annihilation Maps in SupCom

This document will walk you through a process to import the heightmap from a Total Annihilation map into Supcom.

Unfortunately for the rest of the map creation process, its business as usual - ie hand painting albedos, placing decals and mex patches so there's nothing to be gained from reading this document in that regard.

Maybe there's an easier, less fiddly way to do this that I'm missing. If you know one, leave a comment!

Step 1: extract your original TA map
Tool: HPI View by JoeD (https://files.tauniverse.com/files/ta/utilities/hpi-view-pack-dump)
Run HPIView and "file" "open" any .ufo, .hpi or .ccx that contains some maps:
Extract the .tnt and .ota files of the map you want to recreate.

Step 2: export height-map
Download and install "annihilator" map editor: https://www.fileplanet.com/archive/p-11530/Total-Annihilation-map-editor
Run Annihilator and open your map
Go "map" "export heightmap" and export to .bmp

Step 3: convert to 16bit and re-scale
You may have another image editing tool that can do the job for you, but you'll need some specialised features. Specifically, the tasks we're going to carry out are:

  • convert to 16 bit
  • scale or change canvas size to 2^n+1 x 2^n+1 (eg 257x257 or 513x513 or 1025x1025)
  • multiply intensities by about 10
  • export to .raw

One such tool that can accomplish all these tasks is ImageJ (https://imagej.nih.gov/ij/)
Load the .bmp into ImageJ
Go "Image" "type" and select "16 bit".

[edit] As of at lest v2.10 it seems Gimp is able to work with 16 bit greyscale imges. So you may find Gimp can do the job too although I haven't tested.

Go "Process" "Math" "Multiply" and choose 10. You may need to experiment a bit with this.

There seems to be a bug in imagej where the image appears saturated, but don't be alarmed. That's just a rendering issue, the underlying numbers are fine.

Go "Image" "scale" and re-scale to some power of two plus one. I've chosen to scale to 513x513 (10km x 10km) in this case.

Now go "File" "Save As" "Raw Data" and give a filename such as "crystal cracked.heightmap.513x513x10.raw" to record for posterity the scale factors you used.

Step 4 create the SupCom map and import the heightmap
Install OzoneX's fine map editor (https://wiki.faforever.com/index.php?title=FA_Forever_Map_Editor).
Load it up and create a new map, set the map size to match what you scaled your height map too (512x512 in my case).
Go "Terrain" "Import" and navigate to your "crystal cracked.heightmap.513x513x10.raw" file. Go to "add height" and add a bit elevation as required. eg I added +10 to bring the islands just above the water line (which I set as 16).

Step 5. Get Creative
Now its time to get creative. Look at the original map to see where the resources (mexes, hydros, rocks, trees, spawn points) are placed. Copy or approximate or re-blance as you see fit. Do a bit of play-testing.
And then get to work making it look beautiful with layered albedos and decals.

If after having done all that hard work you find you want to change the map size, take a look at https://github.com/Axle1975/ScmpRescale/releases, a tool for rescaling SupCom maps and/or importing them into other maps.

thanks for sharing im in the process of reviewing the guides and tutorials available for mapping i think you just got yourself on the list

Vault Admin / Creative Team / Map Guru

No worries MadMax, I hope it helps someone

just tried this i don't think the settings used in imagej are right the imported map was well off in height

Annotation 2020-09-07 183851.png

i exported it from ozonex and scaled the height and acheived this

Annotation 2020-09-07 184526.png

i will obviously be doing more work on it but it's good enough for a base

Vault Admin / Creative Team / Map Guru

yeah something gone wrong there, its a fiddly process. My guess is that you scaled the height (the "multiply" operation in ImageJ) by too much and then when you imported into FAForever Map Editor you selected the "clamp top" option when it complained about "distance between lowest and highest point is higher than 50".

Another possibility is that in ImageJ (if you're not careful) the saturated rendering can affect the numbers. I can't remember exactly what to do in ImageJ to make that happen, but if you mouse-over the pixels you should be able to see what intensity (ie height) the pixel is at the top left of the window. Check that just before you export to .raw. If those numbers seem saturated, then that's the problem.