dcs-liberation / dcs_liberation

DCS World dynamic campaign.
GNU Lesser General Public License v3.0
712 stars 185 forks source link

Marianas Agat campaign squadron generation monoculture #1803

Closed MaHuJa closed 2 years ago

MaHuJa commented 2 years ago

Describe the bug

Generates only 5 F-14B squadrons, plus support squadrons.

To Reproduce

  1. Start new campaign
  2. Select Marianas - Guam - Landing at Agat
  3. Keep clicking next/finished
  4. Squadron list has F-14Bs.

Expected behavior

At least one F/A-18C squadron, but should be more.

Version information (please complete the following information): Liberation 5.0.0

Additional information

squadrons:
  Blue CV:
    - primary: BARCAP
      secondary: air-to-air
    - primary: BARCAP
      secondary: any
    - primary: Refueling
    - primary: Strike
      secondary: any
    - primary: BAI
      secondary: air-to-ground
    - primary: CAS
      secondary: air-to-ground
    - primary: AEW&C

Apart from AEW and Tanker, the generator selects F-14B squadrons for each of the above.

Additional context

The force mix you can have in this campaign is bad because: 1) More players have F-18 than F-14 and AV-8B combined (conjecture). That leaves this campaign inaccessible to most players. 2) AV-8B cannot fill the capability hole (in particular, SEAD) left by the F18. Especially not in AI hands.

The F-18 is far more common than F-14, and far more necessary for the threat environment created in this campaign. The harrier, as available on the LHA, cannot quite fill the hole the missing f18 leaves.

Workarounds: -Currently, it may require a custom faction that doesn't have tomcats. -#1758, when released.

Solutions:

Solutions: The 'easy' solution is for the above to be fixed in the campaign yaml quoted above, to prefer specific airframes. The mount Barrigada campaign has a similar problem, missing both F18 and F16, and also using the older model A-10C. And that's just the ones I've seen so far.

The 'hard' solution would be for a squadron to not only have a role (e.g. CAS) but each role having a 'strength' (/suitability) value for how well suited the aircraft is for that role. The F-14 would be stronger for BARCAP/air-to-air, but the F-18 would be stronger for CAS. And/or down-prioritizing the airframes already selected.

MetalStormGhost commented 2 years ago

This is caused by the fact squadrons are selected in sequence when none have been specified in the campaign yaml. Both F-14B and F/A-18C have squadrons (shipped with Liberation), but only F-14B squadrons are selected because they come up first.

New squadrons are only generated if there aren't any predefined squadrons for the primary task.

        # If we didn't find any of the preferred types we should use any squadron
        # compatible with the primary task.
        squadron_def = self.find_squadron_for_task(config.primary, control_point)
        if squadron_def is not None:
            return squadron_def

        # If we can't find any squadron matching the requirement, we should
        # create one.
        return self.squadron_def_generator.generate_for_task(
            config.primary, control_point
        )
    def find_squadron_for_task(
        self, task: FlightType, control_point: ControlPoint
    ) -> Optional[SquadronDef]:
        for squadrons in self.squadron_defs.values():
            for squadron in squadrons:
                if self.squadron_compatible_with(squadron, task, control_point):
                    return squadron
        return None

I don't have plans to define squadrons for my Guam campaigns, I will let the player select them. #1852 allows them to be selected in the UI.