diff --git a/game/db.py b/game/db.py index 499ac936..738d7a2a 100644 --- a/game/db.py +++ b/game/db.py @@ -1234,29 +1234,41 @@ def find_unittype(for_task: Task, country_name: str) -> List[Type[UnitType]]: return [x for x in UNIT_BY_TASK[for_task] if x in FACTIONS[country_name].units] -def find_infantry(country_name: str, allow_manpad: bool = False) -> List[UnitType]: - inf = [ - Infantry.Paratrooper_AKS, Infantry.Paratrooper_AKS, Infantry.Paratrooper_AKS, Infantry.Paratrooper_AKS, - Infantry.Paratrooper_AKS, - Infantry.Soldier_RPG, - Infantry.Infantry_M4, Infantry.Infantry_M4, Infantry.Infantry_M4, Infantry.Infantry_M4, Infantry.Infantry_M4, - Infantry.Soldier_M249, - Infantry.Soldier_AK, Infantry.Soldier_AK, Infantry.Soldier_AK, Infantry.Soldier_AK, Infantry.Soldier_AK, - Infantry.Paratrooper_RPG_16, - Infantry.Georgian_soldier_with_M4, Infantry.Georgian_soldier_with_M4, Infantry.Georgian_soldier_with_M4, - Infantry.Georgian_soldier_with_M4, - Infantry.Infantry_Soldier_Rus, Infantry.Infantry_Soldier_Rus, Infantry.Infantry_Soldier_Rus, - Infantry.Infantry_Soldier_Rus, - Infantry.Infantry_SMLE_No_4_Mk_1, Infantry.Infantry_SMLE_No_4_Mk_1, Infantry.Infantry_SMLE_No_4_Mk_1, - Infantry.Infantry_Mauser_98, Infantry.Infantry_Mauser_98, Infantry.Infantry_Mauser_98, - Infantry.Infantry_Mauser_98, - Infantry.Infantry_M1_Garand, Infantry.Infantry_M1_Garand, Infantry.Infantry_M1_Garand, - Infantry.Infantry_Soldier_Insurgents, Infantry.Infantry_Soldier_Insurgents, Infantry.Infantry_Soldier_Insurgents - ] +MANPADS: List[VehicleType] = [ + AirDefence.SAM_SA_18_Igla_MANPADS, + AirDefence.SAM_SA_18_Igla_S_MANPADS, + AirDefence.Stinger_MANPADS +] + +INFANTRY: List[VehicleType] = [ + Infantry.Paratrooper_AKS, Infantry.Paratrooper_AKS, Infantry.Paratrooper_AKS, Infantry.Paratrooper_AKS, + Infantry.Paratrooper_AKS, + Infantry.Soldier_RPG, + Infantry.Infantry_M4, Infantry.Infantry_M4, Infantry.Infantry_M4, Infantry.Infantry_M4, Infantry.Infantry_M4, + Infantry.Soldier_M249, + Infantry.Soldier_AK, Infantry.Soldier_AK, Infantry.Soldier_AK, Infantry.Soldier_AK, Infantry.Soldier_AK, + Infantry.Paratrooper_RPG_16, + Infantry.Georgian_soldier_with_M4, Infantry.Georgian_soldier_with_M4, Infantry.Georgian_soldier_with_M4, + Infantry.Georgian_soldier_with_M4, + Infantry.Infantry_Soldier_Rus, Infantry.Infantry_Soldier_Rus, Infantry.Infantry_Soldier_Rus, + Infantry.Infantry_Soldier_Rus, + Infantry.Infantry_SMLE_No_4_Mk_1, Infantry.Infantry_SMLE_No_4_Mk_1, Infantry.Infantry_SMLE_No_4_Mk_1, + Infantry.Infantry_Mauser_98, Infantry.Infantry_Mauser_98, Infantry.Infantry_Mauser_98, + Infantry.Infantry_Mauser_98, + Infantry.Infantry_M1_Garand, Infantry.Infantry_M1_Garand, Infantry.Infantry_M1_Garand, + Infantry.Infantry_Soldier_Insurgents, Infantry.Infantry_Soldier_Insurgents, Infantry.Infantry_Soldier_Insurgents +] + + +def find_manpad(country_name: str) -> List[VehicleType]: + return [x for x in MANPADS if x in FACTIONS[country_name].infantry_units] + + +def find_infantry(country_name: str, allow_manpad: bool = False) -> List[VehicleType]: if allow_manpad: - inf.append(AirDefence.SAM_SA_18_Igla_MANPADS) - inf.append(AirDefence.SAM_SA_18_Igla_S_MANPADS) - inf.append(AirDefence.Stinger_MANPADS) + inf = INFANTRY + MANPADS + else: + inf = INFANTRY return [x for x in inf if x in FACTIONS[country_name].infantry_units] diff --git a/gen/armor.py b/gen/armor.py index 39c5e5e4..34a02f54 100644 --- a/gen/armor.py +++ b/gen/armor.py @@ -165,10 +165,6 @@ class GroundConflictGenerator: def gen_infantry_group_for_group(self, group, is_player, side:Country, forward_heading): - # Disable infantry unit gen if disabled - if not self.game.settings.perf_infantry: - return - infantry_position = group.points[0].position.random_point_within(250, 50) if side == self.conflict.attackers_country: @@ -181,6 +177,23 @@ class GroundConflictGenerator: else: faction = self.game.enemy_name + # Disable infantry unit gen if disabled + if not self.game.settings.perf_infantry: + if self.game.settings.manpads: + # 50% of armored units protected by manpad + if random.choice([True, False]): + u = random.choice(db.find_manpad(faction)) + self.mission.vehicle_group( + side, + namegen.next_infantry_name(side, cp, u), u, + position=infantry_position, + group_size=1, + heading=forward_heading, + move_formation=PointAction.OffRoad) + return + + + possible_infantry_units = db.find_infantry(faction, allow_manpad=self.game.settings.manpads) if len(possible_infantry_units) == 0: return