User Tools

Site Tools


falcon4:tools:cate

CATE

Configurable Auto Tiling Enhancer by Skyfire

This program basically manipulates L2 in every possible way.

  • Auto Tiles features (Roads/Rivers/Cities).
  • Auto Tiles transitions and coasts.
  • Changes tiles according to altitude.
  • Reads “regional” areas and terrain types from Bitmap.
  • Change elevations, using random or set values etc. for example lower all river tiles 200ft.
  • Tiles and Levels airbases according to campaign CSV file.
  • Changes fog levels.
  • Save accurate terrain map including features.

Source code is written in Visual Basic and its available CATE.v4.17.VB.Source.rar from Falcon.4.0.Tools.2024-03-19/ Torrent Magnet:

magnet:?xt=urn:btih:a429686bdbd1593645c62f5c7156e3e94a5ff2b4&xt=urn:btmh:1220fb71e3d1bc81942313d2af9b4ea419f2b9a19037328b76cb50f82ff41dafc174&dn=Falcon.4.0.Tools.2024-03-19&tr=udp%3a%2f%2ftracker.opentrackr.org%3a1337%2fannounce&tr=udp%3a%2f%2ftracker.openbittorrent.com%3a6969%2fannounce

Feature Auto Tiling

CATE does pretty impressive work on features (roads, rivers and cities). These features are read from Dem2Terrain created TDF files and then tiled into the terrain. Its cutting kind of short on rivers as they usually are the most messy part of tiling (even humans have trouble with them), so when rivers do mess things up near roads, the auto tiling just nicely ends the river so it cannot mess things up. If the river goes near road and zig zags there to mess things up, its ended and in the suitable place where the zig zagging does not cause trouble the river is continued. If however the river and road are in perfect alignment, it tiles bridge tile into that location.

Bitmap

You can have CATE tiling just certain areas using your defined terrain type according to the color in the bitmap image.

Lets make a quick example; You take the Terrainview saved bitmap map image and color certain areas with green, certain areas with brown. Now you configure CATE bmp rules to say that all RGB colors matching the green, it will tile dry farmland and also change all current feature (road, river and city) tiles to dry farmland tiles. All the region matching palette brown will be used to tile mountains terrain type, also changing the feature tiles on the way.

Way cool huh?

Airbase Tiling and Leveling

In falcon terrain the airbases consists usually on 6 tiles, which are laid either horizontal or vertical angles.

One of these six tiles in the middle is the so called anchor tile which points to the coordinates from objective location in campaign/TE. To see where this objective (airbase) is located we first export the airbases only out of tacedit, that exported CSV file is read by CATE where it gets the coordinates.

The CSV file also tells the airbase type and using that type its selected what kind of airbase tiles are tiled in the terrain according to the terrain type, meaning farmland gets farmland airbase and forest gets forest airbase type.

When the tiled are placed in the terrain, we still have the problem in game that different elevations make the runway look like a stairs effect, so we either select the lowest point or highest point on the airbase tile area plus one tile above and all the tiles in that range are set for that elevation. This way in game we have perfectly smooth airbase surface and all aircraft's can take off.

So far (mid 2009) there is no new airbases created for Falcon, all current theaters are using default Korean airbase 3D objects. We have put together list of these airbases and their corresponding tile offsets, names and types.

Elevation Changes

Best use of adjusting elevations are the above mentioned airbase leveling but also excellent place to use it is for rivers.

Now usually F4 terrain is in certain terms flat if its road, river, city, farm, forest or what ever tile type, in nature we know that the rivers are of course always few feet or more lower than the rest of the ground immediately around it, making it a river.

We can set search for all river tiles, and if found, we drop the elevation for X amount if feet and we can even select to drop X amount of feet but now go lower than 1ft because if we set it to 0, then falcon considers that terrain piece to be ocean.

Random Tile Placement

The option to randomly place tiles is good choice to populate the terrain with different and interesting look, we can debate to the death if its realistic or not, but it is certain that randomly tiled generic tiles look always better than one (1) single tile covering thousands of tiles all around.

If we combine this random placement with bitmap region paintings, we can nicely place farmlands, forests and so on.

Saving BitMap

Do you have difficulties getting accurate map for your terrain? No more. You can have CATE build a accurate map of your terrain including all the roads, rivers, cities and even airbases included in L2.

As the bitmap painting you can specify all colors to be used, same goes saving bitmap, just select any bmp 256 color value what you want to use for any specific elevation/tile/feature etc. You can specify all tiles individually even.

Example Korean .bin Config

Korea texture.bin confs

There is examples of fully working default Microprose Korean texture.bin tile-sets CATE configs. These are developed and used in various theaters using the default texture.bin file.

If you find any bugs or have any suggestions, feel free to post our forums about it.

As we run CATE in several passes, here are the different pass configs. These are ran in this order.

1 - Preparation:

#
# Korea texture.bin basic terrain types, preparation
#

[Rules: Standard mode section]
Color=-1,-1,-1

FullRegionTest=No

#   swamp thing
#TileRule=1 300 (*) (1076) * * * *

#   wet farmland
#TileRule=301 1640 (*) (160) * * * *

#   dry farmland
#TileRule=1641 3280 (*) (48) * * * *

TileRule=1 1650 (*) (48) * * * *

#   forest
#TileRule=3281 6560 (*) (68) * * * *
TileRule=1651 11480 (*) (68) * * * *

#   mountain rock
#TileRule=6561 11480 (*) (260) * * * *

TileRule=11481 99999 (*) (260) * * * *

#   snowcap
#TileRule=11481 99999 (*) (694) * * * *

[EndRules]

# EOF

2 - Cities:

# cities
TDFFileName=..\csv\city.tdf

FullRegionTest=No

[TerrainFeatures: Default]
City=321
[EndTerrainFeatures default]

[TerrainFeatures: Forest]
TerrainType=1
TerrainTiles=(68,490)
City=490
[EndTerrainFeatures forest]

[TerrainFeatures: swamp]
TerrainType=2
TerrainTiles=(1076,1124)
City=1124
[EndTerrainFeatures swamp]

[TerrainFeatures: wetfarm]
TerrainType=3
TerrainTiles=(160,321)
City=321
[EndTerrainFeatures wetfarm]

[TerrainFeatures: mountain]
TerrainType=4
TerrainTiles=(260,321)
City=321
[EndTerrainFeatures mountain]

3 - Transitions:

# transitions
DoTransitions=OK

FullRegionTest=No

[TerrainFeatures: Farm]
TerrainType=2
TerrainTiles=(32-46,48,64-67,69-78,208-220)
TransitionDef=ToOcean 1 (0,1434) (39,41,42,43,44,46,34,35,45,40,32,36,38,37,0)
TransitionDef=ToForest 1 (68) (72,73,76,66,75,77,71,64,78,67,74,65,69,70,68)
TransitionDef=ToCity 1 (321) (214,219,217,210,216,220,213,208,208,211,218,209,212,215,321)
[EndTerrainFeatures Farm]

[TerrainFeatures: City]
TerrainType=3
TerrainTiles=(321,480-493,1424-1438)
TransitionDef=ToOcean 1 (0) (1429,1437,1428,1430,1436,1431,1427,1424,1438,1435,1432,1425,1433,1426,1434)
[EndTerrainFeatures City]

[TerrainFeatures: forestCity]
TerrainType=4
TerrainTiles=(68,464-467,480-489,491-494)
TransitionDef=ToCity 1 (490) (492,467,484,466,488,491,493,464,464,481,489,486,482,487,490)
[EndTerrainFeatures forestCity]

[TerrainFeatures: Forest]
TerrainType=7
TerrainTiles=(68,256-259,261-271)
TransitionDef=ToForest 1 (260) (268,265,269,258,264,271,267,256,270,263,266,257,262,259,260)
[EndTerrainFeatures Forest]

4 - Features:

# features
TDFFileName=..\csv\roadriver.tdf

FullRegionTest=No

[FeaturesDesc]
 
#Plain terrain tiles
Tile=1076 0/1076 1/1114 2/1115 3/1110 4/1117 5/1104 6/1105 7/1111 8/1112 9/1106 10/1107 11/1108 12/1109 13/1118 14/1116 15/1113 16/1165 32/1153 48/1156 64/1152 80/1155 96/1158 112/1162 128/1161 144/1160 160/1159 176/1164 192/1157 208/1154 224/1163 240/1166 165/1092 90/1094

Tile=160 0/160 1/187 2/188 3/180 4/190 5/181 6/176 7/182 8/183 9/179 10/177 11/185 12/178 13/186 14/184 15/189 16/507 32/505 48/500 64/496 80/502 96/497 112/506 128/508 144/499 160/498 176/504 192/501 208/509 224/503 240r224 165/405 90/406

Tile=48 0/48 1/126 2/125 3/113 4/112 5/115 6/117 7/122 8/118 9/119 10/116 11/120 12/114 13/121 14/123 15/124 16/393 32/394 48/384 64/392 80/389 96/387 112/395 128/397 144/390 160/386 176/391 192/385 208/388 224/396 240r224 165/369 90/372
 
Tile=68 0/68 1/301 2/296 3/294 4/293 5/288 6/289 7/300 8/292 9/295 10/290 11/299 12/291 13/297 14/298 15/302 16/282 32/283 48/273 64/284 80/272 96/275 112/281 128/278 144/277 160/276 176/279 192/274 208/285 224/280 240/286 165/129 90/136
 
#City tiles
Tile=321 3/1014 5/1008 6/1016 7/1011 9/1013 10/1009 11/1017 12/1015 13/1010 14/1012 15/1018
Tile=208 0/48 1/126 2/125 3/113 4/112 5/115 6/117 7/122 8/118 9/119 10/116 11/120 12/114 13/121 14/123 15/124
Tile=209 0/48 1/126 2/125 3/113 4/112 5/338 6/117 7/122 8/118 9/119 10/116 11/120 12/114 13/121 14/123 15/124
Tile=210 0/48 1/126 2/125 3/113 4/112 5/115 6/117 7/122 8/118 9/119 10/336 11/120 12/114 13/121 14/123 15/124
Tile=211 0/48 1/126 2/125 3/113 4/112 5/115 6/117 7/122 8/118 9/119 10/116 11/120 12/114 13/121 14/123 15/124
Tile=212 0/48 1/126 2/125 3/113 4/112 5/115 6/117 7/122 8/118 9/119 10/116 11/120 12/114 13/121 14/123 15/124
Tile=213 0/48 1/126 2/125 3/113 4/112 5/115 6/117 7/122 8/118 9/119 10/116 11/120 12/114 13/121 14/123 15/124
Tile=214 0/48 1/126 2/125 3/113 4/112 5/115 6/117 7/122 8/118 9/119 10/116 11/120 12/114 13/121 14/123 15/124
Tile=215 0/48 1/126 2/125 3/113 4/112 5/115 6/117 7/122 8/118 9/119 10/116 11/120 12/114 13/121 14/123 15/124
Tile=216 0/48 1/126 2/125 3/113 4/112 5/115 6/117 7/122 8/118 9/119 10/337 11/120 12/114 13/121 14/123 15/124
Tile=217 0/48 1/126 2/125 3/113 4/112 5/339 6/117 7/122 8/118 9/119 10/116 11/120 12/114 13/121 14/123 15/124
Tile=218 0/48 1/126 2/125 3/113 4/112 5/115 6/117 7/122 8/118 9/119 10/116 11/120 12/114 13/121 14/123 15/124
Tile=219 0/48 1/126 2/125 3/113 4/112 5/115 6/117 7/122 8/118 9/119 10/116 11/120 12/114 13/121 14/123 15/124
Tile=220 0/48 1/126 2/125 3/113 4/112 5/115 6/117 7/122 8/118 9/119 10/116 11/120 12/114 13/121 14/123 15/124
 
#Forest transitions
Tile=64 0/68 1/301 2/296 3/294 4/293 5/288 6/289 7/300 8/292 9/295 10/290 11/299 12/291 13/297 14/298 15/302
Tile=65 0/68 1/301 2/296 3/294 4/293 5/137 6/289 7/300 8/292 9/295 10/290 11/299 12/291 13/297 14/298 15/302 80/128
Tile=66 0/68 1/301 2/296 3/294 4/293 5/288 6/289 7/300 8/292 9/295 10/290 11/299 12/291 13/297 14/298 15/302
Tile=67 0/68 1/301 2/296 3/294 4/293 5/288 6/289 7/300 8/292 9/295 10/135 11/299 12/291 13/297 14/298 15/302 160/133
Tile=69 0/68 1/301 2/296 3/294 4/293 5/288 6/289 7/300 8/292 9/295 10/290 11/299 12/291 13/297 14/298 15/302
Tile=70 0/68 1/301 2/296 3/294 4/293 5/288 6/289 7/300 8/292 9/295 10/290 11/299 12/291 13/297 14/298 15/302
Tile=71 0/68 1/301 2/296 3/294 4/293 5/288 6/289 7/300 8/292 9/295 10/290 11/299 12/291 13/297 14/298 15/302
Tile=72 0/68 1/301 2/296 3/294 4/293 5/288 6/289 7/300 8/292 9/295 10/290 11/299 12/291 13/297 14/298 15/302
Tile=73 0/68 1/301 2/296 3/294 4/293 5/288 6/289 7/300 8/292 9/295 10/290 11/299 12/291 13/297 14/298 15/302
Tile=74 0/68 1/301 2/296 3/294 4/293 5/288 6/289 7/300 8/292 9/295 10/290 11/299 12/291 13/297 14/298 15/302
Tile=75 0/68 1/301 2/296 3/294 4/293 5/288 6/289 7/300 8/292 9/295 10/134 11/299 12/291 13/297 14/298 15/302 160/132
Tile=76 0/68 1/301 2/296 3/294 4/293 5/131 6/289 7/300 8/292 9/295 10/290 11/299 12/291 13/297 14/298 15/302 80/130
Tile=77 0/68 1/301 2/296 3/294 4/293 5/288 6/289 7/300 8/292 9/295 10/290 11/299 12/291 13/297 14/298 15/302
Tile=78 0/68 1/301 2/296 3/294 4/293 5/288 6/289 7/300 8/292 9/295 10/290 11/299 12/291 13/297 14/298 15/302
 
[EndFeaturesDesc]

5 - Airbases:

#
# airbases
#

ABFileName=..\csv\airbases.csv

FullRegionTest=No

[AirbasesDef]
AirbaseDef=1 -1 -4 1 4 (SUNAN)
AirbaseDef=2 0 -1 1 1 (21_03)
AirbaseDef=3 0 -1 2 1 (05_23,23_05)
AirbaseDef=4 0 -1 1 1 (36_18)
AirbaseDef=5 0 -1 1 1 (02_20,20_02)
AirbaseDef=6 0 -1 1 1 (01_19)
AirbaseDef=7 0 -1 2 0 (08_26,26_08)
# old AirbaseDef=8 -1 -1 1 0 (12_30,30_12)
AirbaseDef=8 -1 0 1 1 (12_30,30_12)
AirbaseDef=9 0 -1 1 1 (34_16)
AirbaseDef=10 -3 -2 0 0 (KIMPO)
AirbaseDef=11 0 -1 1 2 (505)
AirbaseDef=12 -1 0 1 1 (11_29)
AirbaseDef=13 0 -1 1 1 (32_14,14_32)
AirbaseDef=14 0 -2 1 1 (SEOUL)
[EndAirbases]

#
# default desert type "other"
#
[TerrainFeatures: Default]
Airbase=1 HI (1366,1367,1368,1363,1364,1365,1363,1364,1365,1363,1364,1365,1363,1364,1365,1363,1364,1365,1363,1364,1365,1363,1364,1365,1360,1361,1362)
Airbase=2 HI (852,853,850,851,848,849)
Airbase=3 HI (741,742,48,738,739,740,48,736,737)
Airbase=4 HI (628,629,626,627,624,625)
Airbase=5 HI (954,955,952,953,950,951)
Airbase=6 HI (628,629,626,627,624,625)
Airbase=7 HI (947,948,949,944,945,946)
Airbase=8 HI (1043,1044,1045,1040,1041,1042)
Airbase=9 HI (1050,1051,1048,1049,1046,1047)
Airbase=10 HI (48,48,1638,1639,48,1635,1636,1637,1632,1633,1634,48)
Airbase=11 HI (1382,1383,1380,1381,1378,1379,1376,1377)
Airbase=12 HI (857,858,859,854,855,856)
Airbase=13 HI (747,748,745,746,743,744)
Airbase=14 HI (1702,1703,1700,1701,1698,1699,1696,1697)
[EndTerrainFeatures Default]

[TerrainFeatures: dryfarm]
TerrainType=1
TerrainTiles=(16-19,32-46,48-51,112-126,240-253,352-365,368-373,384-398)
Airbase=1 HI (1366,1367,1368,1363,1364,1365,1363,1364,1365,1363,1364,1365,1363,1364,1365,1363,1364,1365,1363,1364,1365,1363,1364,1365,1360,1361,1362)
Airbase=2 HI (852,853,850,851,848,849)
Airbase=3 HI (741,742,48,738,739,740,48,736,737)
Airbase=4 HI (628,629,626,627,624,625)
Airbase=5 HI (954,955,952,953,950,951)
Airbase=6 HI (628,629,626,627,624,625)
Airbase=7 HI (947,948,949,944,945,946)
Airbase=8 HI (1043,1044,1045,1040,1041,1042)
Airbase=9 HI (1050,1051,1048,1049,1046,1047)
Airbase=10 HI (48,48,1638,1639,48,1635,1636,1637,1632,1633,1634,48)
Airbase=11 HI (1382,1383,1380,1381,1378,1379,1376,1377)
Airbase=12 HI (857,858,859,854,855,856)
Airbase=13 HI (747,748,745,746,743,744)
Airbase=14 HI (1702,1703,1700,1701,1698,1699,1696,1697)
[EndTerrainFeatures dryfarm]

[TerrainFeatures: forest]
TerrainType=2
TerrainTiles=(64-78,128-140,144-158,224-229,272-286,288-302)
Airbase=1 HI (1366,1367,1368,1363,1364,1365,1363,1364,1365,1363,1364,1365,1363,1364,1365,1363,1364,1365,1363,1364,1365,1363,1364,1365,1360,1361,1362)
Airbase=2 HI (852,853,850,851,848,849)
Airbase=3 HI (635,636,68,632,633,634,68,630,631)
Airbase=4 HI (628,629,626,627,624,625)
Airbase=5 HI (1492,1493,1490,1491,1488,1489)
Airbase=6 HI (628,629,626,627,624,625)
Airbase=7 HI (947,948,949,944,945,946)
Airbase=8 HI (931,932,933,928,929,930)
Airbase=9 HI (938,939,936,937,934,935)
Airbase=10 HI (68,68,1638,1639,68,1635,1636,1637,1632,1633,1634,68)
Airbase=11 HI (1382,1383,1380,1381,1378,1379,1376,1377)
Airbase=12 HI (857,858,859,854,855,856)
Airbase=13 HI (747,748,745,746,743,744)
Airbase=14 HI (1702,1703,1700,1701,1698,1699,1696,1697)
[EndTerrainFeatures forest]


# 08_26 / 26_08
#XOO
#OOO	(x1,y1)=(0,-1) - (x2,y2)=(2,0)

#OOO			
#OXO	(x1,y1)=(-1,0) - (x2,y2)=(1,1)

#OO
#XO
#OO	(x1,y1)=(0,-1) - (x2,y2)=(1,1)

#OXO 
#OOO	(x1,y1)=(-1,-1) - (x2,y2)=(1,0)

# OO
#XOO 
#OO	(x1,y1)=(0,-1) - (x2,y2)=(2,1)

# 545
#OOOO
#OXOO	(x1,y1)=(-1,0) - (x2,y2)=(2,1)

# 505 wonsan
#OO
#XO
#OO
#OO	(x1,y1)=(0,-2) - (x2,y2)=(1,1)

# KIMPO
#OOO
# OOO
#  OX	(x1,y1)=(-3,0) - (x2,y2)=(0,2)

#SEOUL AB
#OO
#OO
#XO
#OO	(x1,y1)=(0,-2) - (x2,y2)=(1,1)

# korea reference
# x 452
# y 401
# coord tile 1700

# X1 and y1 define the South West tile, X2 and y2 define the North East tile, 

# matches
# 21_03 == 848-853
# 34_16 == 934-939
# 05_23 2 - Tiles: 736-742 (coord tile: 738).
# 30_12 - tiles 1040-1045 (coord tile: 1041). Note that 12_30 is the same.

6 - Variations:

#
# variations
#

BMPFileName=..\images\clean.bmp

FullRegionTest=NO

[Rules: farmland]
Color=223,193,105
TileRule=1 99999 (48) (48,48-51,80-82,96-99,192-195,432-434,448-449,576-579,608-612,864-868) * * * *
TileRule=1 99999 (68) (68,68,68,68,68,68,68,68,147,224-229,882,1522) * * * *
TileRule=1 99999 (260) (260,260,261) * * * *
TileRule=1	99999	(272-286,384-397,496-509,512,513,517,518,128,130,132,133,16-19,416-419,514-523,674-677) (*)	* * *	M-100G
TileRule=1	99999	(321)	(320-322)	* * * *
[EndRules]

[Rules: wetfarm]
Color=148,173,123
TileRule=1 99999 (48) (48,48,80,80,96,96,97,97,98,98,448,449) * * * *
TileRule=1 99999 (68) (68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,147,224-229,882,1522) * * * *
TileRule=1 99999 (260) (260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,261) * * * *
TileRule=1	99999	(272-286,384-397,496-509,512,513,517,518,128,130,132,133,16-19,416-419,514-523,674-677) (*)	* * *	M-100G
TileRule=1	99999	(321)	(320-322)	* * * *
[EndRules]

[Rules: forest]
Color=107,139,90
TileRule=1 99999 (68) (68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,147,224-229,882,1522) * * * *
TileRule=1 99999 (260) (260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,261) * * * *
TileRule=1	99999	(272-286,384-397,496-509,512,513,517,518,128,130,132,133,16-19,416-419,514-523,674-677) (*)	* * *	M-100G
TileRule=1	99999	(321)	(320-322)	* * * *
[EndRules]

[SaveBmp]
SaveBmp=cate.bmp

# water
BmpTile=(0,32-46) 148,181,214
# dry farmland
BmpTile=(48) 123,165,115
# forest
BmpTile=(64-78) 180,190,140
# snowcap
BmpTile=(694) 230,228,249
# city?
BmpTile=(208-220,321,490,1424-1438) 206,74,0
# airbase
BmpTile=(304-316,624-636,736-748,848-859,883-886,928-939,944-955,1040-1051,1200-1205,1360-1368,1376-1383,1408-1413,1472-1483,1488-1493,1616-1622,1632-1639,1698-1703,1712-1720,1728-1735,1744-1749) 255,0,255
# roads
BmpTile=(112-126,129,136,137,288-302,369,372,1104-1118) 107,8,0
# city roads
BmpTile=(336-339,352-361,976-979,1008-1018) 107,8,0
# rivers
BmpTile=(128,130,132,133,272-286,384-397,496-509,1152-1166) 0,99,140
# wet farmland
BmpTile=(1076) 123,164,115
[EndSaveBmp]

Hope that helps.

falcon4/tools/cate.txt · Last modified: 2024-03-19 08:45 by snakeman