logo
background
 Home and Links
 Your PC and Security
 Server NAS
 Wargames
 Astronomy
 PhotoStory
 DVD making
 Raspberry Pi
 PIC projects
 Other projects
 Next >>

Fixing CF annoyances using .usrc/.tsrc definitions

CF defs. fix

Changing the Unit and Tile definition files

Many (if not most) of my 'annoyances' can be fixed just by changing the unit and tile definitions

The new .tiles and .units files must be present in the crimson.exe home folder after re-compiling the .erc (if they are not found, crimson will crash when you click on one of the .lev game files)

Units/Tile movement

Each Unit has a basic movement 'allowance' and a list of basic terrain 'types' it is 'allowed to enter'**.

Each individual terrain tile has both a basic 'type' (water, trenches, swamp, shop, shallowwater, rough, road, restricted, rails, plains, mountains, forest, deepwater) and well as an individual (Move=) 'cost to enter'. Note that the 'minimum' cost to enter is 0 (only** Buildings use this), with (Tarmac) roads set to '1' and all other Terrain tiles set to higher values

Calculating the possible movement destinations is then a matter of deducting the 'cost to enter' from the Units 'allowance' for each Tile (of a type it is allowed to enter) until the Unit's allowance is insufficient to enter the next tile
 
** There is one 'special case' when both 'allowed to enter' is ignored and 'cost to enter' is 0 = and that's when you are next to a Transport Unit (but only so long as you can be carried by that Transport i.e. are within the max. min. limits and the Transport has sufficient 'spare space')
 
The only other 'special case' is when 'deploying' a 'move=0' unit (i.e. mines), however in this case, the 'allowed to enter' restrictions are NOT ignored

The combination of a Unit's move plus 'allowed to enter' setting along with the Tile 'types' and individual 'cost to enter' values can be used to 'fix' a huge number of issues without needing to change one line of code

A Tile can be of more than one basic 'type' (for example, Docks are both Shallowwater and Plains, as are the Beach tiles), plus Tiles actually have a different 'cost to enter' for Sea and Ground units (an Air unit counts all terrain as 'cost = 1'). To prevent units entering a tile, the 'cost to enter' can be set to '99' (which is way above any Unit movement allowance)

One of my major issues is the lack of 'granularity' in movement - roads are '1' and plains (and most other terrain) is '2'. This lets (ground units) move twice as fast on roads as cross-country. For wheeled vehicles this may be OK, but for AFV's it's nonsense (at best they would be x1.5 speed) - and means dirt tracks = same as cross-country

It's to be noted that some units may be 'allowed to enter' (that terrain type) but the 'cost to enter' a particular Tile may be so high that they can only enter when 'starting' right next to that tile (trenches, tank traps, barbed wire etc).

So the first thing I did was triple the 'move =' of every Unit and every Tile.

Initially I doubled everything, however this still didn't work (roads cost 2, track 3, grassland 4 - so travel on roads is still twice as fast as grass :-) )
 
Triple lets me set roads 3, track 4, grass 5 - not ideal, but at least roads are no longer twice grass speed.
 
NB. The only way to keep track of terrain and unit movement interaction is to spreadsheet the whole lot ...

Road and tracks

Setting roads=3 and plains=5, allows me to set all the (dirt) 'track' Tiles to 'move=4'

I also looked at the basic 'move=' of units and worked out how this would 'divide out' when travelling on Road(3)/Track(4)/Plains(5)

Unit speed and 'transport' interaction

When I started increasing Unit speed, I noticed that the game GUI suddenly started to let me move one unit 'on top of' a friendly unit 'next door', at which point (unless the friend was a 'transport' unit) the game crashed

This only happened with 'high speed' units, which appeared to 'override' the existence of the other unit, whilst units in tiles further away where correctly recognised.
 
Interestingly, when the triend had 'transport' capability, the 'translots' and 'min/max weight' would be ignored and the moving unit would be 'loaded' in. The game then continued (it was even possible to 'move out' again !).
 
Further, it wan't possible to 'stop' on an enemy unit (so no crash, and no 'load into transpport')
 
After a lot of playing with unit speed etc. I concluded the following :-
 
If a tile is occupied by a unit, the 'cost to enter' is increased by 15. You can't 'stop' on enemy units. If you 'stop' on a friend, when the unit has transport capavility the moving unit is loaded in, else crimson.exe crashes.
 
This means every unit with a move of 18 or more (on land) can be moved onto a nextdoor friend on road(3) and crash crinson.exe - and those with a move of 21+ can move (on road) through an enemy in front onto a road tile beyond
 
With water set to 5, Boats with a move of 20+ can crash crimson.exe (and those with a move of 25+ can move onto the sea tile beypnd)
 
Fixing this means code changes = so players will just have to be careful :-)
 
As a consequence, units with high speeds are actually capable of 'moving through' other units (which I see as a 'plus', although it's a bit odd when a Rail unit does this :-) ).

Transport weights etc

The transports system is really flexible ! Each unit has a 'weight'. A transport unit has both a 'minimum' and 'maximum' for an individual unit it's allowed to carry, as well as a total weight ('transslots')

I noted that after I multiplied all the 'weights' by 5 (see above) I had a lot more flexibility in the transport system = so that's where I left them.
 
Plainly some units should 'never' be carried (eg. Aircraft Carrier :-) ) = so I set these to weight=99. There only other 'tweak' I made was to drop the weights of Boats (so they could be 'carried' by train, and repaired by the 'Aircraft carrier'
 
I saw no reason why Patrol Boats shouldn't carry Infantry, so adjusted the 'max weight'.
 
Unit a dedicated gun tractor is defined (as a new unit) I decided to allow APC's to 'carry' AA guns

Units (.usrc)

NOTE == unlike Tiles (where the 'name' is irrelevant) changing a Unit name (in the .usrc) means changing the Unit names in all the Map .src

So, whilst a number of Units are badly named, I avoided making too many name changes (initially, only 'Scouts' to 'SPG')

Infantry and APC's

Infantry on plains(5) need a move of 3, so they get an allowance of at least 15. That means on tracks(4) = 3 and roads(3) = 5.

However there is a problem with Infantry - they have armour (10) which is better that AA Guns (7) and Artillery (7), and their attack power(10) is higher than that of the APC's that carry them ! They also have the ability to attack aircraft - however both these issues are easily fixed
 
I removed Infantry AA capability and reduced their ground/ship power to 8 and their armour to 8 (and upped AA Guns and Artillery armour to 10 whilst increasing APC power to 10).

Having set Infantry speed, everything else is then 'scaled' from this

Tanks

Heavy Tanks original 'move allowance' of 7 triples to 21. That gives us moves of Road/Track/Grass = 7/5/4. Decreasing the Heavy Tank move to 20 reduces the road speed to 6 but still allows 5 (tracks) and 4 (plains) = much better.

So Heavy tanks speed=20, giving 6/5/4
 
Medium Tanks should be faster on road but much the same cross-country, so speed=22, giving 7/5/4
 
'Light' Tanks (AA Tanks and APC's) at least 1 faster than Medium Tanks, so speed=25, giving 8/6/5
 
Note Medium and Light Tanks can move through enemy or friends with a 15 'penalty'.
Medium Tanks(22) can move through another unit on road(3+15) to another road(3) tile (3+15 +3 = 21) or a road+track combination (3+15+4 = 21), whilst Light Tanks(25) can move through another unit on grass (5 + 15 + 5) !

Artillery

Whilst the Unit icon shows Self Propelled Artillery, it can't move and fire so behaves more like towed Artillery !

For movement, this unit fits between Heavy Tanks and Infantry. Setting speed=16, gives 5,4,3 (Infantry is 5,3,3 and Heavy Tanks 6/5/4
 
For now, I leave this Unit otherwise 'as is', however when new Units are created this unit gets renamed to Self-Propelled Guns, gets a 'move and fire' capability, has it's Attack and range reduced (from 2-6 to 2-5) and it's armour increased (the replacement 'towed artillery' can't move and fire, has better Attack and range (2-7) than SP Guns but much lower armour - and has to be 'carried' by a truck

'Scouts'

The most useful thing about the 'Scout' unit is it's 'range' of '1-2', which means it's best played as a Self Propelled Howitzer.

I upped it's armour to that of a Medium Tank and reduced it's speed to 20 (same as a Heavy Tank). I also adjusted it's range from 1-2 to 2-3 (in recognition of the Howitzer designation)
 
Changing it's name would mean changing every occurrence of 'scout' in all the Map .src files, so I left that to later = see my 'New Units' page)

Hovercraft

These 'super flying tanks' get cut back to being a 'transport' unit.

Their attack values are cut to same as APC, move same as Heavy tank

Rail (and Trains)

Trains have to stick to rail tiles, so we can choose rail tile move= first and then set train speeds.

Rail should slow the movement of 'normal' units, so with grassland ('plains') = 5, I set Rail tiles 'cost to enter' to 6 (1 worse than grassland).
 
Trains should move faster than any unit on road (but slower than Helicopters :-) ). With APC's and light tanks doing 8 on road, I decided that (troop) trains should do at least 10 rail hex's, giving me a basic basic speed=60 (troop trains).
 
However this immediately means that Trains can 'move through' other units. An occupied rail tile 'costs' 6+15 = 21, so a train can pass through any combination of 1 occupied tile and (60-21/6) 6 Rail tiles, or 2 units and 3 Rail tiles !
 
This is just about acceptable (rational being each tile is really 2-4km in size and each 'unit' hundreds of men & vehicles 'spread out' over that area) trains move fast enough to 'surprise' the enemy) EXCEPT when trains move through other trains on the single track rail tiles. To make this a (bit) less obvious, I decided to give 'armoured trains' and 'rail guns' the same speed as troop trains ..

I saw no reason why Armoured Trains should get a range of 1-2 (when Tanks etc. are range 1) so I removed their ranged attack capability (and cut back their 'power')

Anti-aircraft units

Both AA units are unrealistic - AA Guns can't fire at ground units (and have excessive range for 'guns'), whilst 'AA Tanks' have a puny range of 1 = so can only 'attack' aircraft by moving next to them - although they can at least fire at other ground units

The existing "AA Guns" are slow moving but have a massive range of 2-6. They also can't fire on the same turn that they move.
 
This means the behave more like a mobile 'AA Missile Battery', which 'explains' their slow speed, long range and why they can't be used against Ground or Sea units (only Air).
 
However this also means we are missing a Unit = the towed AA Gun (see later) = for now the AA Gun will be carried by the APC from which it can be 'deployed' (like a mine) !
 
The AA Tank has it's speed reduced (it's way too fast) and it's terrain 'allowed to enter' to the same terrain as other tracked vehicles (no way are Tanks allowed up Mountains). However in recognition of their function, their range (against air units) is adjusted to 1-2.

Air units

Since air units count all tile moves =1, 'triple speed' leads to all air units = 3x as fast as previous !

With troop trains doing 10, I reduced (Helicopter) Gunships to 14. Even then, on small maps, this effects game play rather too much, however after I increased all Maps to at least 60 hex's wide x 40 deep (see later) I found the speed change worked well.

A few things still needed fixing (Bombers being faster than 'Fighters' for example :-)

My final Aircraft speeds :-
(Ground Attack) Fighters = 18
Transport planes = 16
Interceptors = 22
Bombers = 16
(Helicopter) Gunships = 14

Submarines (and Torpedo Boats)

Submarines have numerous issues, most of which can't be simply fixed. One thing that can be fixed is Submarines are limited to 'deepwater'

This is total nonsense, since it means they can't even leave their bases.
 
It's easy enough to add 'water' (but not shallowwater, since that would let them move 'upstream' :-) )

Submarines have a long-range 3 hex attack capability. This is not totally unrealistic compared to Heavy Tanks, which are restricted to 'next hex' but would have a range of 2-3km so a 3 hex range thus corresponds to only 6-9km (todays Submarine torpedoes can be fired from 40-50km away).

The issue is, this allows them to be used as 'Sea Artillery' from the 3rd rank (i.e. behind the Torpedo Boats in the second rank which are themselves fighting behind the Patrol Boats in the first rank).
 
I reasoned that if Subs have 1-3 range, so should all Torpedo's = so I increased the Torpedo Boat range (against other sea units only)

The real problem with Submarines is the 'God's eye view' i.e. Subs can't 'dive'. However this can't be easily 'fixed' without software changes

Other boats and ships

Patrol Boats should, in general, be slightly better armed and armoured than Torpedo Boats (given the same speed, a lugging around a couple of heavy Torpedoes must mean less armour - and less space for heavy machine guns).

So Patrol Boats get Armour 18, power ground/ship 12 (and air 8) whilst Torpedo Boats get Armour 15, power ground/ship 10 (and 0 air)

All Boats (and Landing Craft) are limited to shallow and (medium) water, whilst Ships and Subs to medium and deep water and Aircraft Carriers to deep water only

This means Transport Ships carrying Landing Craft (see later) won't be able to 'launch' them until they reach medium water, and Transport ships carrying Hovercraft will only be able to launch them when the ship reaches a medium water hex next to a shallow water or land hex (so the Hovercraft can enter directly into shallow water or land).

Tiles (.tsrc)

Rivers and streams

I wanted to allow Light, Medium Tanks and APC's to 'ford' streams, whilst, at the same time, allowing boats (including landing craft = see later) to cross.

When I tried adding 'terrain=shallowwater' to Tanks and APC's, I found them wading out into the sea to attack boats and ships !

Further, since 'real rivers' are already made of 'shallowwater' river bank tiles (as are Beach tiles), giving the AFV's shallowwater capability wouldn't work as intended. The only other choices would be 'Restricted' (which is used for foot-bridges and Tank Traps i..e to stop ranks crossing) or Rough = which is used for Wire and slopes, which tanks can already cross.

Eventually I ended up setting 'river' tiles as 'rough' and giving boats 'rough' capability
To stop the AI moving units 'up river', I had to increase the cost of moving in 'river' tiles to 7 (so it's 'always' harder to move along the river than it is to use the terrain tiles forming the banks)

Since I wanted boats to move up river only slightly slower than normal water, that in turn meant adjusting all other water tiles

To avoid sea units 'passing through' other units, the speed of Boats move had to be less than 2x sea move +15.
Setting sea=6, means Boats max is 26 (1 less than 2x6+16 =27) giving them a sea move of 26/6 = 4 and a river move of 26/7 = 3. Dropping the move to 24 still lets them do 4 sea and 3 River and prevents any 'move through'.
 
So, water tiles now 'cost' 6 (and river 7), and naval units get the following moves :-
 
Patrol Boats = 24 (4 sea, 3 river)
Torpedo Boats = 24 (4 sea, 3 river)
Troopships = 18 (3)
Submarines = 18 (3)
Aircraft Carriers = 24 (4)
Hovercraft 24 (4 sea, 3 river)

Bridges.

Tarmac Road bridges and Rail bridges over shallow water and streams exist, as does a 'foot bridge' over 'stream'. However, sea units are 'blocked' by all types of bridges - and this must be fixed (else Boats can't travel up shallowwater rivers)

The 'shallow water' type will be added to Tarmac Road bridges and Rail bridges.
 
This will allow boats (and hovercraft) to pass under them (whilst land units will pass over them).
 
Bridges over streams will be defined as type 'road', however foot bridges will be set to 'mountain' (to stop vehicles crossing) with a low cost to enter (3).

'Fences' = Barbed wire

The 15 'fence' tiles (ID 133-147, immediately before the trenches set, in .tsrc) are renamed 'wire'. They currently have a terrain type 'rough' which only allows Infantry and AA Tanks to cross = why ? if AA Tanks are allowed to cross 'fences', why not other tracked vehicles ?

Even if these 'fences' were really 'solid stone walls', Heavy Tanks would still be able to cross :-)
 
So, step 1 = change 'fences' to 'wire' and set type 'trenches'. At the same time, I removed 'rough' from AA Tanks.
 
Next, wire is always laid 'in the open', so anyone 'stopped' (hung up) on a barbed wire tile should have their attack and defensive values reduced (as 'fences', both attack and defense was increased !). I set attack -2 and defense -3.
 
Finally, what should be the move= cost ? Well, I want Infantry to 'just make it' across the wire to a 'plains' tile but not (directly) into a trenches tile. So, Infantry speed 15, plains(5) gives me wire(10)

'Barricades' = Tank Traps

The 6 'barricades' tiles (directly before 'wire') are depicted as 4 or 5 white 'diamonds' on grass i.e as Tank Traps. Tank Traps allow Infantry to pass whilst blocking all Tanks except 'anti-aircraft Tanks' (which is nonsense). Worse, there is no way to 'destroy' them !

Tank Traps can be made into a type of Unit with no movement, no attack and limited defense (i.e. just like the existing Mines) which would allow them to be attacked and destroyed. HOWEVER that's worse, because then they become impassable to all units, including aircraft !
 
For now, about the best that can be done is set them to 'restricted' (which only Infantry is allowed into) with the same 'cost' as grassland(5)
 
Code changes will be required to totally 'fix' the Tank Trap 'as a Unit' problem (the obvious plan is to add a 'pass over/through' parameter to Units, which fixes the 'can't fly over' issue as well)

NB. Of the 6 tiles, the first 2 look identical (3 'diamonds'), the next is 4 'diamonds', then we have 2 more identical (5 'diamonds') and finally 5 'diamonds' on rough ground. All 6 had exactly the same move cost (now 5), (so there is no practical difference between them). On the other hand, we need more hills = so (later) I dropped the first 4 and reduced these to '5 traps on grass' and '5 traps on rough'

I adjusted the move cost for 'tank traps on rough' to 6.

Mines

Next we come to "mines". The existing "mine" unit is a sort of 'concrete tank trap' (or, at Sea, a 'floating rock') since all they can be used for is to 'block' the movement of all other units (including their own). They are quite tough, but can be 'destroyed' with impunity since they don't 'fight back'. The standard definition of the 'unit = mine' has 'armour = 25', no 'power' against anything (so can inflict no damage) and is limited to 'terrain =' water, shallowwater and deepwater, all of which is plainly nonsense !

Real mines 'explode'. So I gave them 'power(ship) = 35' and 'power(ground) = 35' and reduced 'armour = 25' to 'armour = 1'. The 'disadvantage' of an 'exploding' mine is that there's nothing to stop you 'clearing' the mines using your Artillery (or other ranged unit). However this is not totally unrealistic (since it slows your attack and means you have to divert your artillery support)
 
The 'power' setting means they get a 'decent' counter-punch when attacked, and armour 1 ensures they will die after being attacked. However Units are not compelled to attack. This means the enemy can move a unit up to a minefield but not attack it = not wise since the 'owner' of a mine can then 'direct' the mine to attack** on their own turn :-)
 
** Yes, I did try setting 'range' of 0 (in the hope that would prevent the owners 'firing' them), but the source code in mkunitset.cpp uses 'range=0' to 'flag' units that have no combat power against a specific unit type, so setting mines to 'range 0' also removes their 'counter-attack' capability ...
 
When time allows I'll fix the code so 'range 0' will mean no attack but still allow a 'counter-attack' = exactly as mines should behave

The 'mine' unit has a move=0 and can still be 'deployed' by it's transport onto any 'permitted' terrain tile and 'swept' (i.e. picked up again). In fact, a (transport) Unit with 'sweeper' capability, can (if it has sufficient weight allowance), pick up any other Unit that has been set to type = mine (and that includes the enemy == i.e. mines can be 'stolen' :-) ).

The terrain restrictions on mines seemed odd (why not mine woods ??), so Mines can now be deployed into all Terrain types EXCEPT deepwater and mountains.
 
This required a land-carrier so I pressed the APC into service (which means it now gets 'sweeper' capability ...). Note = when I allowed Trooptrains and Transport Aircraft to carry mines as 'ammunition', they suddenly turned into mine-layers, so, for now, ony Patrol Boats and AP's get to carry mines :-)
 
It turns out that any unit capabile of carrying a mine can 'deploy' them into whatever terrain is 'allowed' for the mine. So Patrol Boats can deploy mines onto a coastal/beach/river-bank ground hexes, and APC's  can lay mines in rivers (or on the shore-line) = and an air transport, if allowed to carry them, couldlay mines anywhere.
 
To address this issue, I later defined new 'terrain limited' Mine units (sea mines that can't be used on land and land-mines that can't be used at sea) along with 'Mine Sweepers' and 'Engineering Units' = see my New Units page

Other uses for 'mine' type

The only real difference between a mine and a 'normal' unit is that mines can be 'swept' (loaded into a transport) by either side, whilst normal units have to 'move into' their own transport. The only 'problem' with defining units that can be 'stolen from the enemy' (swept) is that the AI has no idea of how to handle them

The AI will build mines in its factories but will never load them onto Patrol Boats and ship them off to the front.
 
Further, when it has a Patrol Boat next to an enemy mine, the AI will attack the mine (instead of stealing it)

However 'type=mine' does allow you to create (deployable, attackable, stealable) 'obstacles'** as a 'unit' (defined as 'type=mine') that other units (of 'type=sweeper') can 'dig up' (pick up & move) without needing to attack it.

The 'transporter' min & max weight parameters (see above) can be used to control which unit can deploy or 'sweep' which type of 'mine'.

This allows 'barrier construction' = for example, an Engineering Unit that can deploy 'real' Tank Traps - and destroy (sweep) enemy ones.

Units can have 'medic' capability (which allows them to repair other units) but not 'factory' capability.
 
This means the Tank Traps have to be 'manufactured' in a building and carried by the Engineering (transport) unit. On arrival, the Tank traps are unloaded.
 
Of course, as a unit, they can be attacked and destroyed by the enemy (so long as you set a 'reasonable' armour= value)
 
A Demolition unit (transport) with 'sweeper' capability can 'pick up' the Tank Trap and remove it = when 'sweeping', the 'sweeper' unit must have the capability of entering the terrain hex where the 'target' (mine) is positioned so it's possible to limit the Demolition unit to Tank Traps in specific terrain types

One obvious unit type that should be capable of being 'picked up and removed' is the Pontoon Bridge. The problem is, of course, that 'as a unit' Pontoon Bridges can't be crossed by other units = so the Events system has to be used to 'convert' the Pontoon unit into a (bridge) terrain tile (see later)

Next page :- Unit and Terrain - (tips and tricks)

[top]