One of the first ‘calls’ in an AIO script is to calculate the CV for every unit in the game. There are 70 unique unit types in MWIF.
// To the straight forward combat factor of a land unit, adjustments are made
// that take into consideration its mobility. Working from a base of 4
// movements points, the combat value is incremented or decremented by 0.5
// points for every difference in movement points. For example, a 7-5 infantry
// is worth 7.5 CVs and a 6-3 is worth 5.5 CVs. Divisional units are reduced by
// a full point for their lack of zones of control. Similarly, territorial
// units have their CV reduced by 1 for the penalty they suffer in combat when
// not stacked with a non-territorial land unit.
//
// There is a minimum combat value of 1 CV for a unit after adjustments, which
// keeps a 2-1 garrison and 1-4 divisional unit from becoming worthless.
// ****************************************************************************
utInfantry, utMilitia, utGarrison:
begin
LU := TLandUnit(U);
Result := LU.Combat + ((LU.Move - 4.0) * 0.5);
if LU.Small then Result := Result - 1.0
// ****************************************************************************
// Corps sized German SS units have a garrison value of 2.
// ****************************************************************************
else if LU.Country = GermanSS.ID then Result := Result + 1.0;
// ****************************************************************************
// Add bonus for elite units.
// ****************************************************************************
if LU.Elite then Result := Result + 2;
// ****************************************************************************
// Add bonus for winterized units.
// ****************************************************************************
if LU.SnowUnit then Result := Result + 2;
if Result < 1.0 then Result := 1.0;
end;
utWarlord:
begin
LU := TLandUnit(U);
// ****************************************************************************
// Warlords can only move 6 hexes from their home city, so their value is
// reduced by 1.
// ****************************************************************************
Result := LU.Combat + ((LU.Move - 4.0) * 0.5) - 1;
if Result < 1.0 then Result := 1.0;
end;
utTerritorial:
begin
LU := TLandUnit(U);
// ****************************************************************************
// While territorial units suffer penalties when attacking and defending without
// the help of non-territorial units, they are capable of getting supply from
// cities in their home country and can move more freely in their home country.
// ****************************************************************************
Result := LU.Combat+ ((LU.Move - 4.0) * 0.5) - 1.0 ;
if Result < 1.0 then Result := 1.0;
end;
utMountain:
begin
LU := TLandUnit(U);
// ****************************************************************************
// Besides being tripled in mountain terrain, mountain units can also be air
// transported by ATR units and are 'SnowSet' units.
// ****************************************************************************
Result := LU.Combat + ((LU.Move - 4.0) * 0.5) + 3.0; // Mountain + 3.
if LU.Small then Result := Result - 1.0
// ****************************************************************************
// Add bonus for elite units.
// ****************************************************************************
else if LU.Elite then Result := Result + 2;
if Result < 1.0 then Result := 1.0;
end;
utMotorized:
begin
LU := TLandUnit(U);
Result := LU.Combat + ((LU.Move - 4.0) * 0.5) + 1; // Motorized + 1.
if LU.Small then Result := Result - 1.0
// ****************************************************************************
// Corps sized German SS units have a garrison value of 2.
// ****************************************************************************
else if LU.Country = GermanSS.ID then Result := Result + 1.0;
// ****************************************************************************
// Add bonus for elite units.
// ****************************************************************************
if LU.Elite then Result := Result + 2;
// ****************************************************************************
// Add bonus for winterized units (e.g., Finnish, Swedish, Norwegian, Russian).
// ****************************************************************************
if LU.SnowUnit then Result := Result + 2;
end;
utMechanized:
begin
LU := TLandUnit(U);
Result := LU.Combat + ((LU.Move - 4.0) * 0.5) + 2.0 ; // Mechanized + 2.
if LU.Small then Result := Result - 1.0
// ****************************************************************************
// Add bonus for elite units.
// ****************************************************************************
else if LU.Elite then Result := Result + 2;
// ****************************************************************************
// Add bonus for winterized units.
// ****************************************************************************
if LU.SnowUnit then Result := Result + 2;
end;
utArmor:
begin
LU := TLandUnit(U);
Result := LU.Combat + ((LU.Move - 4.0) * 0.5) + 3.0; // Armor + 3.
if LU.Small then Result := Result - 1.0
// ****************************************************************************
// Add bonus for elite units.
// ****************************************************************************
else if LU.Elite then Result := Result + 2;
// ****************************************************************************
// Add bonus for winterized units.
// ****************************************************************************
if LU.SnowUnit then Result := Result + 2;
end;
utCavalry:
begin
LU := TLandUnit(U);
Result := LU.Combat;
// ****************************************************************************
// Cavalry units have movement values of either 4 or 5. Being able to move 5
// means that they can enter adjacent swamp hexes without becoming disorganized.
// ****************************************************************************
if LU.Move = 5 then Result := Result + 2.0;
if LU.Small then Result := Result - 1.0
// ****************************************************************************
// Corps sized German SS units have a garrison value of 2.
// ****************************************************************************
else if LU.Country = GermanSS.ID then Result := Result + 1.0;
// ****************************************************************************
// Add bonus for elite units.
// ****************************************************************************
if LU.Elite then Result := Result + 2;
// ****************************************************************************
// Add bonus for winterized units.
// ****************************************************************************
if LU.SnowUnit then Result := Result + 2;
if Result < 1.0 then Result := 1.0;
end;
utMarine:
begin
LU := TLandUnit(U);
Result := (LU.Combat * 2) + ((LU.Move - 4.0) * 0.5); // Marine doubled.
if LU.Small then Result := Result - 1.0
// ****************************************************************************
// Add bonus for elite units.
// ****************************************************************************
else if LU.Elite then Result := Result + 2;
end;
utParatroop:
begin
LU := TLandUnit(U);
Result := (LU.Combat * 1.5) + ((LU.Move - 4.0) * 0.5); // Para * 1.5.
if LU.Small then Result := Result - 1.0
// ****************************************************************************
// Add bonus for elite units.
// ****************************************************************************
else if LU.Elite then Result := Result + 2;
end;
utInfantryHQ:
begin
LU := TLandUnit(U);
Result := LU.Combat + ((LU.Move - 4.0) * 0.5);
// ****************************************************************************
// Add bonus for winterized units.
// ****************************************************************************
if LU.SnowUnit then Result := Result + 2;
// ****************************************************************************
// Add bonus for elite units.
// ****************************************************************************
if LU.Elite then Result := Result + 2;
// ****************************************************************************
// HQs belonging to major powers can act as secondary supply sources for aligned
// minor countries and cooperating major powers. That makes them superior to
// HQs belonging to minor countries, including Nationalist and Communist Chinese
// HQs.
// ****************************************************************************
if UnitHomeCountryCommonwealth(LU).ClassType = TMajorCountry then
begin
Result := Result + (LU.Reorg * 2) + 10;
end
else
begin // Minor country HQs can trace supply to their home country cities.
Result := Result + (LU.Reorg * 2) + 6;
end;
end;
utArmorHQ:
begin
LU := TLandUnit(U);
Result := LU.Combat + ((LU.Move - 4.0) * 0.5);
// ****************************************************************************
// Add bonus for winterized units.
// ****************************************************************************
if LU.SnowUnit then Result := Result + 2;
// ****************************************************************************
// Add bonus for elite units.
// ****************************************************************************
if LU.Elite then Result := Result + 2;
// ****************************************************************************
// HQs belonging to major powers can act as secondary supply sources for aligned
// minor countries and cooperating major powers. That makes them superior to
// HQs belonging to minor countries, including Nationalist and Communist Chinese
// HQs. All armor HQs belong to major powers.
// ****************************************************************************
Result := Result + (LU.Reorg * 3) + 10;
end;
utPartisanHQ:
begin
LU := TLandUnit(U);
Result := LU.Combat + ((LU.Move - 4.0) * 0.5);
// ****************************************************************************
// Partisan HQs belong to the USSR and Yugoslavia. The former is a major power
// and the latter is a minor country. Partisan HQs are especially nice since
// they are always in supply and do not need oil to be reorganized.
// ****************************************************************************
if UnitHomeCountryCommonwealth(LU).ClassType = TMajorCountry then
begin
Result := Result + (LU.Reorg * 2) + 12;
end
else
begin
Result := Result + (LU.Reorg * 2) + 8;
end;
// ****************************************************************************
// Add bonus for winterized units.
// ****************************************************************************
if LU.SnowUnit then Result := Result + 2;
// ****************************************************************************
// Add bonus for elite units.
// ****************************************************************************
if LU.Elite then Result := Result + 2;
end;

