diff --git a/game/db.py b/game/db.py index 1a6c6008..499ac936 100644 --- a/game/db.py +++ b/game/db.py @@ -1234,7 +1234,7 @@ 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) -> List[UnitType]: +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, @@ -1253,6 +1253,10 @@ def find_infantry(country_name: str) -> List[UnitType]: Infantry.Infantry_M1_Garand, Infantry.Infantry_M1_Garand, Infantry.Infantry_M1_Garand, Infantry.Infantry_Soldier_Insurgents, Infantry.Infantry_Soldier_Insurgents, Infantry.Infantry_Soldier_Insurgents ] + 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) return [x for x in inf if x in FACTIONS[country_name].infantry_units] diff --git a/game/settings.py b/game/settings.py index 08c28c15..2359a88e 100644 --- a/game/settings.py +++ b/game/settings.py @@ -26,6 +26,7 @@ class Settings: multiplier: float = 1.0 generate_marks: bool = True sams: bool = True # Legacy parameter do not use + manpads: bool = True cold_start: bool = False # Legacy parameter do not use version: Optional[str] = None diff --git a/gen/aircraft.py b/gen/aircraft.py index f16ede99..90ddc9e3 100644 --- a/gen/aircraft.py +++ b/gen/aircraft.py @@ -293,12 +293,19 @@ class FlightData: #: Map of radio frequencies to their assigned radio and channel, if any. frequency_to_channel_map: Dict[RadioFrequency, ChannelAssignment] + #: Bingo fuel value in lbs. + bingo_fuel: Optional[int] + + joker_fuel: Optional[int] + def __init__(self, package: Package, flight_type: FlightType, units: List[FlyingUnit], size: int, friendly: bool, departure_delay: timedelta, departure: RunwayData, arrival: RunwayData, divert: Optional[RunwayData], waypoints: List[FlightWaypoint], - intra_flight_channel: RadioFrequency) -> None: + intra_flight_channel: RadioFrequency, + bingo_fuel: Optional[int], + joker_fuel: Optional[int]) -> None: self.package = package self.flight_type = flight_type self.units = units @@ -311,6 +318,8 @@ class FlightData: self.waypoints = waypoints self.intra_flight_channel = intra_flight_channel self.frequency_to_channel_map = {} + self.bingo_fuel = bingo_fuel + self.joker_fuel = joker_fuel self.callsign = create_group_callsign_from_unit(self.units[0]) @property @@ -777,7 +786,9 @@ class AircraftConflictGenerator: divert=divert, # Waypoints are added later, after they've had their TOTs set. waypoints=[], - intra_flight_channel=channel + intra_flight_channel=channel, + bingo_fuel=flight.flight_plan.bingo_fuel, + joker_fuel=flight.flight_plan.joker_fuel )) # Special case so Su 33 carrier take off diff --git a/gen/armor.py b/gen/armor.py index 448ceb50..147576ba 100644 --- a/gen/armor.py +++ b/gen/armor.py @@ -179,7 +179,7 @@ class GroundConflictGenerator: else: faction = self.game.enemy_name - possible_infantry_units = db.find_infantry(faction) + possible_infantry_units = db.find_infantry(faction, allow_manpad=self.game.settings.manpads) if len(possible_infantry_units) == 0: return @@ -203,7 +203,6 @@ class GroundConflictGenerator: heading=forward_heading, move_formation=PointAction.OffRoad) - def plan_action_for_groups(self, stance, ally_groups, enemy_groups, forward_heading, from_cp, to_cp): if not self.game.settings.perf_moving_units: @@ -334,7 +333,6 @@ class GroundConflictGenerator: dcs_group.add_waypoint(retreat_point, PointAction.OnRoad) dcs_group.add_waypoint(reposition_point, PointAction.OffRoad) - def add_morale_trigger(self, dcs_group, forward_heading): """ This add a trigger to manage units fleeing whenever their group is hit hard, or being engaged by CAS @@ -371,7 +369,6 @@ class GroundConflictGenerator: self.mission.triggerrules.triggers.append(fallback) - def find_retreat_point(self, dcs_group, frontline_heading, distance=RETREAT_DISTANCE): """ Find a point to retreat to @@ -438,7 +435,6 @@ class GroundConflictGenerator: return potential_target.points[0].position return None - def get_artilery_group_distance_from_frontline(self, group): """ For artilery group, decide the distance from frontline with the range of the unit @@ -450,7 +446,6 @@ class GroundConflictGenerator: rg = DISTANCE_FROM_FRONTLINE[CombatGroupRole.TANK] + 100 return rg - def get_valid_position_for_group( self, conflict_position: Point, diff --git a/gen/flights/ai_flight_planner_db.py b/gen/flights/ai_flight_planner_db.py index 2dbc6433..ea3dcb6e 100644 --- a/gen/flights/ai_flight_planner_db.py +++ b/gen/flights/ai_flight_planner_db.py @@ -481,7 +481,7 @@ STRIKE_PREFERRED = [ ANTISHIP_CAPABLE = [ AJS37, - + C_101CC, Su_24M, Su_17M4, FA_18C_hornet, @@ -503,6 +503,7 @@ ANTISHIP_CAPABLE = [ ANTISHIP_PREFERRED = [ AJS37, + C_101CC, FA_18C_hornet, JF_17, Rafale_A_S, diff --git a/gen/flights/flightplan.py b/gen/flights/flightplan.py index b461d4cd..faba8ebe 100644 --- a/gen/flights/flightplan.py +++ b/gen/flights/flightplan.py @@ -28,7 +28,7 @@ from game.theater import ( TheaterGroundObject, ) from game.theater.theatergroundobject import EwrGroundObject -from game.utils import nm_to_meter +from game.utils import nm_to_meter, meter_to_nm from .closestairfields import ObjectiveDistanceCache from .flight import Flight, FlightType, FlightWaypoint, FlightWaypointType from .traveltime import GroundSpeed, TravelTime @@ -69,6 +69,8 @@ class FlightPlan: """A list of all waypoints in the flight plan, in order.""" return list(self.iter_waypoints()) + + def iter_waypoints(self) -> Iterator[FlightWaypoint]: """Iterates over all waypoints in the flight plan, in order.""" raise NotImplementedError @@ -114,6 +116,38 @@ class FlightPlan: failed to generate. Nevertheless, we have to defend against it. """ raise NotImplementedError + + @cached_property + def bingo_fuel(self) -> int: + """Bingo fuel value for the FlightPlan + """ + distance_to_arrival = meter_to_nm(self.max_distance_from(self.flight.arrival)) + + bingo = 1000 # Minimum Emergency Fuel + bingo += 500 # Visual Traffic + bingo += 15 * distance_to_arrival + + # TODO: Per aircraft tweaks. + + if self.flight.divert is not None: + bingo += 10 * meter_to_nm(self.max_distance_from(self.flight.divert)) + + return round(bingo / 100) * 100 + + @cached_property + def joker_fuel(self) -> int: + """Joker fuel value for the FlightPlan + """ + return self.bingo_fuel + 1000 + + + def max_distance_from(self, cp: ControlPoint) -> int: + """Returns the farthest waypoint of the flight plan from a ControlPoint. + :arg cp The ControlPoint to measure distance from. + """ + if not self.waypoints: + return 0 + return max([cp.position.distance_to_point(w.position) for w in self.waypoints]) @property def tot_offset(self) -> timedelta: diff --git a/gen/kneeboard.py b/gen/kneeboard.py index 7a5794ab..b7064b97 100644 --- a/gen/kneeboard.py +++ b/gen/kneeboard.py @@ -230,28 +230,37 @@ class BriefingPage(KneeboardPage): "#", "Action", "Alt", "Dist", "GSPD", "Time", "Departure" ]) - writer.heading("Comm Ladder") - comms = [] + flight_plan_builder + writer.table([ + ["{}lbs".format(self.flight.bingo_fuel), "{}lbs".format(self.flight.joker_fuel)] + ], ['Bingo', 'Joker']) + + # Package Section + writer.heading("Comm ladder") + comm_ladder = [] for comm in self.comms: - comms.append([comm.name, self.format_frequency(comm.freq)]) - writer.table(comms, headers=["Name", "UHF"]) + comm_ladder.append([comm.name, '', '', '', self.format_frequency(comm.freq)]) - writer.heading("AWACS") - awacs = [] for a in self.awacs: - awacs.append([a.callsign, self.format_frequency(a.freq)]) - writer.table(awacs, headers=["Callsign", "UHF"]) - - writer.heading("Tankers") - tankers = [] + comm_ladder.append([ + a.callsign, + 'AWACS', + '', + '', + self.format_frequency(a.freq) + ]) for tanker in self.tankers: - tankers.append([ + comm_ladder.append([ tanker.callsign, + "Tanker", tanker.variant, str(tanker.tacan), self.format_frequency(tanker.freq), - ]) - writer.table(tankers, headers=["Callsign", "Type", "TACAN", "UHF"]) + ]) + + + writer.table(comm_ladder, headers=["Callsign","Task", "Type", "TACAN", "FREQ"]) + writer.heading("JTAC") jtacs = [] diff --git a/qt_ui/windows/settings/QSettingsWindow.py b/qt_ui/windows/settings/QSettingsWindow.py index 1506187d..74b16332 100644 --- a/qt_ui/windows/settings/QSettingsWindow.py +++ b/qt_ui/windows/settings/QSettingsWindow.py @@ -151,6 +151,10 @@ class QSettingsWindow(QDialog): self.enemyCoalitionSkill.currentIndexChanged.connect(self.applySettings) self.enemyAASkill.currentIndexChanged.connect(self.applySettings) + self.manpads = QCheckBox() + self.manpads.setChecked(self.game.settings.manpads) + self.manpads.toggled.connect(self.applySettings) + self.difficultyLayout.addWidget(QLabel("Player coalition skill"), 0, 0) self.difficultyLayout.addWidget(self.playerCoalitionSkill, 0, 1, Qt.AlignRight) self.difficultyLayout.addWidget(QLabel("Enemy skill"), 1, 0) @@ -158,19 +162,22 @@ class QSettingsWindow(QDialog): self.difficultyLayout.addWidget(QLabel("Enemy AA and vehicles skill"), 2, 0) self.difficultyLayout.addWidget(self.enemyAASkill, 2, 1, Qt.AlignRight) + self.difficultyLayout.addWidget(QLabel("Manpads"), 3, 0) + self.difficultyLayout.addWidget(self.manpads, 3, 1, Qt.AlignRight) + self.difficultyLabel = QComboBox() [self.difficultyLabel.addItem(t) for t in CONST.LABELS_OPTIONS] self.difficultyLabel.setCurrentIndex(CONST.LABELS_OPTIONS.index(self.game.settings.labels)) self.difficultyLabel.currentIndexChanged.connect(self.applySettings) - self.difficultyLayout.addWidget(QLabel("In Game Labels"), 3, 0) - self.difficultyLayout.addWidget(self.difficultyLabel, 3, 1, Qt.AlignRight) + self.difficultyLayout.addWidget(QLabel("In Game Labels"), 4, 0) + self.difficultyLayout.addWidget(self.difficultyLabel, 4, 1, Qt.AlignRight) self.noNightMission = QCheckBox() self.noNightMission.setChecked(self.game.settings.night_disabled) self.noNightMission.toggled.connect(self.applySettings) - self.difficultyLayout.addWidget(QLabel("No night missions"), 4, 0) - self.difficultyLayout.addWidget(self.noNightMission, 4, 1, Qt.AlignRight) + self.difficultyLayout.addWidget(QLabel("No night missions"), 5, 0) + self.difficultyLayout.addWidget(self.noNightMission, 5, 1, Qt.AlignRight) self.mapVisibiitySelection = QComboBox() self.mapVisibiitySelection.addItem("All", ForcedOptions.Views.All) @@ -189,14 +196,14 @@ class QSettingsWindow(QDialog): if self.game.settings.map_coalition_visibility == ForcedOptions.Views.OnlyMap: self.mapVisibiitySelection.setCurrentIndex(4) self.mapVisibiitySelection.currentIndexChanged.connect(self.applySettings) - self.difficultyLayout.addWidget(QLabel("Map visibility options"), 5, 0) - self.difficultyLayout.addWidget(self.mapVisibiitySelection, 5, 1, Qt.AlignRight) + self.difficultyLayout.addWidget(QLabel("Map visibility options"), 6, 0) + self.difficultyLayout.addWidget(self.mapVisibiitySelection, 6, 1, Qt.AlignRight) self.ext_views = QCheckBox() self.ext_views.setChecked(self.game.settings.external_views_allowed) self.ext_views.toggled.connect(self.applySettings) - self.difficultyLayout.addWidget(QLabel("Allow external views"), 6, 0) - self.difficultyLayout.addWidget(self.ext_views, 6, 1, Qt.AlignRight) + self.difficultyLayout.addWidget(QLabel("Allow external views"), 7, 0) + self.difficultyLayout.addWidget(self.ext_views, 7, 1, Qt.AlignRight) def initGeneratorLayout(self): @@ -353,6 +360,7 @@ class QSettingsWindow(QDialog): self.game.settings.player_skill = CONST.SKILL_OPTIONS[self.playerCoalitionSkill.currentIndex()] self.game.settings.enemy_skill = CONST.SKILL_OPTIONS[self.enemyCoalitionSkill.currentIndex()] self.game.settings.enemy_vehicle_skill = CONST.SKILL_OPTIONS[self.enemyAASkill.currentIndex()] + self.game.settings.manpads = self.manpads.isChecked() self.game.settings.labels = CONST.LABELS_OPTIONS[self.difficultyLabel.currentIndex()] self.game.settings.night_disabled = self.noNightMission.isChecked() self.game.settings.map_coalition_visibility = self.mapVisibiitySelection.currentData() diff --git a/resources/briefing/templates/briefingtemplate_CN.j2 b/resources/briefing/templates/briefingtemplate_CN.j2 index 64289e56..8bf4e4c6 100644 --- a/resources/briefing/templates/briefingtemplate_CN.j2 +++ b/resources/briefing/templates/briefingtemplate_CN.j2 @@ -67,7 +67,7 @@ DCS Liberation 第 {{ game.turn }} 回合 {% for flight in flights if flight.client_units %} -------------------------------------------------- {{ flight.flight_type }} {{ flight.units[0].type }} x {{ flight.size }}, {{ flight.package.target.name}} -{% for waypoint in flight.waypoints %}{{ loop.index }} -- {{waypoint.name}} : {{ waypoint.description}} +{% for waypoint in flight.waypoints %}{{ loop.index0 }} -- {{waypoint.name}} : {{ waypoint.description}} {% endfor %} --------------------------------------------------{% endfor %} diff --git a/resources/briefing/templates/briefingtemplate_EN.j2 b/resources/briefing/templates/briefingtemplate_EN.j2 index b9881215..b4bef0d1 100644 --- a/resources/briefing/templates/briefingtemplate_EN.j2 +++ b/resources/briefing/templates/briefingtemplate_EN.j2 @@ -67,7 +67,7 @@ Your flights: {% for flight in flights if flight.client_units %} -------------------------------------------------- {{ flight.flight_type }} {{ flight.units[0].type }} x {{ flight.size }}, {{ flight.package.target.name}} -{% for waypoint in flight.waypoints %}{{ loop.index }} -- {{waypoint.name}} : {{ waypoint.description}} +{% for waypoint in flight.waypoints %}{{ loop.index0 }} -- {{waypoint.name}} : {{ waypoint.description}} {% endfor %} --------------------------------------------------{% endfor %} diff --git a/resources/briefing/templates/briefingtemplate_FR.j2 b/resources/briefing/templates/briefingtemplate_FR.j2 index 8f8c696d..53241a33 100644 --- a/resources/briefing/templates/briefingtemplate_FR.j2 +++ b/resources/briefing/templates/briefingtemplate_FR.j2 @@ -67,7 +67,7 @@ Vols : {% for flight in flights if flight.client_units %} -------------------------------------------------- {{ flight.flight_type }} {{ flight.units[0].type }} x {{ flight.size }}, {{ flight.package.target.name}} -{% for waypoint in flight.waypoints %}{{ loop.index }} -- {{waypoint.name}} : {{ waypoint.description}} +{% for waypoint in flight.waypoints %}{{ loop.index0 }} -- {{waypoint.name}} : {{ waypoint.description}} {% endfor %} --------------------------------------------------{% endfor %} diff --git a/resources/campaigns/invasion_of_iran_[lite].json b/resources/campaigns/invasion_of_iran_[lite].json index 840fb55c..684c9cc9 100644 --- a/resources/campaigns/invasion_of_iran_[lite].json +++ b/resources/campaigns/invasion_of_iran_[lite].json @@ -3,75 +3,5 @@ "theater": "Persian Gulf", "authors": "Khopa", "description": "
This is lighter version of the invasion of Iran scenario.
", - "player_points": [ - { - "type": "airbase", - "id": "Bandar Lengeh", - "radials": [ - 270, - 315, - 0, - 45 - ], - "size": 600, - "importance": 1.4 - }, - { - "type": "carrier", - "id": 1001, - "x": 72000.324335475, - "y": -376000 - }, - { - "type": "lha", - "id": 1002, - "x": -27500.813952358, - "y": -147000.65947136 - } - ], - "enemy_points": [ - { - "type": "airbase", - "id": "Shiraz International Airport", - "size": 2000, - "importance": 1.4, - "captured_invert": true - }, - { - "type": "airbase", - "id": "Jiroft Airport", - "size": 2000, - "importance": 1.4 - }, - { - "type": "airbase", - "id": "Kerman Airport", - "size": 2000, - "importance": 1.4 - }, - { - "type": "airbase", - "id": "Lar Airbase", - "size": 1000, - "importance": 1.4 - } - ], - "links": [ - [ - "Bandar Lengeh", - "Lar Airbase" - ], - [ - "Lar Airbase", - "Shiraz International Airport" - ], - [ - "Kerman Airport", - "Shiraz International Airport" - ], - [ - "Jiroft Airport", - "Kerman Airport" - ] - ] + "miz": "invasion_of_iran_lite.miz" } \ No newline at end of file diff --git a/resources/campaigns/invasion_of_iran_lite.miz b/resources/campaigns/invasion_of_iran_lite.miz new file mode 100644 index 00000000..a7f8d316 Binary files /dev/null and b/resources/campaigns/invasion_of_iran_lite.miz differ diff --git a/resources/factions/australia_2005.json b/resources/factions/australia_2005.json index d983055d..8e9109d2 100644 --- a/resources/factions/australia_2005.json +++ b/resources/factions/australia_2005.json @@ -29,7 +29,8 @@ ], "infantry_units": [ "Infantry_M4", - "Soldier_M249" + "Soldier_M249", + "Stinger_MANPADS" ], "air_defenses": [ "HawkGenerator", diff --git a/resources/factions/bluefor_modern.json b/resources/factions/bluefor_modern.json index aa733bf5..f422a6eb 100644 --- a/resources/factions/bluefor_modern.json +++ b/resources/factions/bluefor_modern.json @@ -54,7 +54,8 @@ ], "infantry_units": [ "Infantry_M4", - "Soldier_M249" + "Soldier_M249", + "Stinger_MANPADS" ], "air_defenses": [ "AvengerGenerator", diff --git a/resources/factions/canada_2005.json b/resources/factions/canada_2005.json index 324007b0..9a170a6f 100644 --- a/resources/factions/canada_2005.json +++ b/resources/factions/canada_2005.json @@ -29,7 +29,8 @@ ], "infantry_units": [ "Infantry_M4", - "Soldier_M249" + "Soldier_M249", + "Stinger_MANPADS" ], "air_defenses": [ "AvengerGenerator", diff --git a/resources/factions/china_2010.json b/resources/factions/china_2010.json index acc807dd..2fe1cb6f 100644 --- a/resources/factions/china_2010.json +++ b/resources/factions/china_2010.json @@ -35,7 +35,8 @@ "infantry_units": [ "Paratrooper_AKS", "Infantry_Soldier_Rus", - "Paratrooper_RPG_16" + "Paratrooper_RPG_16", + "SAM_SA_18_Igla_S_MANPADS" ], "air_defenses": [ "HQ7Generator", diff --git a/resources/factions/france_1995.json b/resources/factions/france_1995.json index 2b441852..2c553009 100644 --- a/resources/factions/france_1995.json +++ b/resources/factions/france_1995.json @@ -35,7 +35,8 @@ ], "infantry_units": [ "Infantry_M4", - "Soldier_M249" + "Soldier_M249", + "Stinger_MANPADS" ], "air_defenses": [ "RolandGenerator", diff --git a/resources/factions/france_2005_modded.json b/resources/factions/france_2005_modded.json index 4edc8e10..34e4511a 100644 --- a/resources/factions/france_2005_modded.json +++ b/resources/factions/france_2005_modded.json @@ -45,7 +45,8 @@ ], "infantry_units": [ "Infantry_M4", - "Soldier_M249" + "Soldier_M249", + "Stinger_MANPADS" ], "air_defenses": [ "RolandGenerator", diff --git a/resources/factions/georgia_2008.json b/resources/factions/georgia_2008.json index 3aec3b57..45b8cfc1 100644 --- a/resources/factions/georgia_2008.json +++ b/resources/factions/georgia_2008.json @@ -30,7 +30,8 @@ ], "infantry_units": [ "Paratrooper_AKS", - "Paratrooper_RPG_16" + "Paratrooper_RPG_16", + "SAM_SA_18_Igla_S_MANPADS" ], "air_defenses": [ "SA3Generator", diff --git a/resources/factions/germany_1990.json b/resources/factions/germany_1990.json index 137437b6..bdf243e7 100644 --- a/resources/factions/germany_1990.json +++ b/resources/factions/germany_1990.json @@ -31,7 +31,8 @@ ], "infantry_units": [ "Infantry_M4", - "Soldier_M249" + "Soldier_M249", + "Stinger_MANPADS" ], "air_defenses": [ "GepardGenerator", diff --git a/resources/factions/india_2010.json b/resources/factions/india_2010.json index 9490e2a5..7b6cedb3 100644 --- a/resources/factions/india_2010.json +++ b/resources/factions/india_2010.json @@ -34,7 +34,8 @@ ], "infantry_units": [ "Infantry_M4", - "Paratrooper_RPG_16" + "Paratrooper_RPG_16", + "SAM_SA_18_Igla_S_MANPADS" ], "air_defenses": [ "SA3Generator", diff --git a/resources/factions/insurgents.json b/resources/factions/insurgents.json index 1e21f6db..8634c534 100644 --- a/resources/factions/insurgents.json +++ b/resources/factions/insurgents.json @@ -21,7 +21,8 @@ ], "infantry_units": [ "Infantry_Soldier_Insurgents", - "Soldier_RPG" + "Soldier_RPG", + "SAM_SA_18_Igla_MANPADS" ], "air_defenses": [ "SA9Generator", diff --git a/resources/factions/insurgents_modded.json b/resources/factions/insurgents_modded.json index f9ae046c..296ee8b5 100644 --- a/resources/factions/insurgents_modded.json +++ b/resources/factions/insurgents_modded.json @@ -22,7 +22,8 @@ ], "infantry_units": [ "Infantry_Soldier_Insurgents", - "Soldier_RPG" + "Soldier_RPG", + "SAM_SA_18_Igla_MANPADS" ], "air_defenses": [ "SA9Generator", diff --git a/resources/factions/iran_2015.json b/resources/factions/iran_2015.json index a6c51cca..cb6ba5f2 100644 --- a/resources/factions/iran_2015.json +++ b/resources/factions/iran_2015.json @@ -40,7 +40,8 @@ "infantry_units": [ "Paratrooper_AKS", "Infantry_Soldier_Insurgents", - "Paratrooper_RPG_16" + "Paratrooper_RPG_16", + "SAM_SA_18_Igla_S_MANPADS" ], "air_defenses": [ "HawkGenerator", diff --git a/resources/factions/israel_2000.json b/resources/factions/israel_2000.json index 72c86dd9..c23c315e 100644 --- a/resources/factions/israel_2000.json +++ b/resources/factions/israel_2000.json @@ -34,7 +34,8 @@ ], "infantry_units": [ "Infantry_M4", - "Soldier_M249" + "Soldier_M249", + "Stinger_MANPADS" ], "air_defenses": [ "ChaparralGenerator", diff --git a/resources/factions/italy_1990.json b/resources/factions/italy_1990.json index 2a804488..62ac4ce5 100644 --- a/resources/factions/italy_1990.json +++ b/resources/factions/italy_1990.json @@ -28,7 +28,8 @@ ], "infantry_units": [ "Infantry_M4", - "Soldier_M249" + "Soldier_M249", + "Stinger_MANPADS" ], "air_defenses": [ "AvengerGenerator", diff --git a/resources/factions/italy_1990_mb339.json b/resources/factions/italy_1990_mb339.json index e76b7f0a..186926f7 100644 --- a/resources/factions/italy_1990_mb339.json +++ b/resources/factions/italy_1990_mb339.json @@ -29,7 +29,8 @@ ], "infantry_units": [ "Infantry_M4", - "Soldier_M249" + "Soldier_M249", + "Stinger_MANPADS" ], "air_defenses": [ "AvengerGenerator", diff --git a/resources/factions/japan_2005.json b/resources/factions/japan_2005.json index 1b6df9aa..de03dbd8 100644 --- a/resources/factions/japan_2005.json +++ b/resources/factions/japan_2005.json @@ -27,7 +27,8 @@ ], "artillery_units": [ "SPH_M109_Paladin", - "MLRS_M270" + "MLRS_M270", + "Stinger_MANPADS" ], "logistics_units": [ "Transport_M818" diff --git a/resources/factions/libya_2011.json b/resources/factions/libya_2011.json index 0da7fb5a..8090ea3c 100644 --- a/resources/factions/libya_2011.json +++ b/resources/factions/libya_2011.json @@ -31,7 +31,8 @@ ], "infantry_units": [ "Infantry_Soldier_Insurgents", - "Paratrooper_RPG_16" + "Paratrooper_RPG_16", + "SAM_SA_18_Igla_MANPADS" ], "air_defenses": [ "HQ7Generator", diff --git a/resources/factions/netherlands_1990.json b/resources/factions/netherlands_1990.json index cc86b3d1..44fc54ed 100644 --- a/resources/factions/netherlands_1990.json +++ b/resources/factions/netherlands_1990.json @@ -26,7 +26,8 @@ ], "infantry_units": [ "Infantry_M4", - "Soldier_M249" + "Soldier_M249", + "Stinger_MANPADS" ], "air_defenses": [ "AvengerGenerator", diff --git a/resources/factions/north_korea_2000.json b/resources/factions/north_korea_2000.json index bfdfd599..a790b576 100644 --- a/resources/factions/north_korea_2000.json +++ b/resources/factions/north_korea_2000.json @@ -38,7 +38,8 @@ "infantry_units": [ "Paratrooper_AKS", "Infantry_Soldier_Rus", - "Paratrooper_RPG_16" + "Paratrooper_RPG_16", + "SAM_SA_18_Igla_S_MANPADS" ], "air_defenses": [ "SA2Generator", diff --git a/resources/factions/pakistan_2015.json b/resources/factions/pakistan_2015.json index acf24440..43ba4bba 100644 --- a/resources/factions/pakistan_2015.json +++ b/resources/factions/pakistan_2015.json @@ -36,7 +36,8 @@ "infantry_units": [ "Paratrooper_AKS", "Infantry_Soldier_Rus", - "Paratrooper_RPG_16" + "Paratrooper_RPG_16", + "Stinger_MANPADS" ], "air_defenses": [ "HQ7Generator", diff --git a/resources/factions/pmc_russian.json b/resources/factions/pmc_russian.json index 42e914df..844bdb3c 100644 --- a/resources/factions/pmc_russian.json +++ b/resources/factions/pmc_russian.json @@ -24,7 +24,8 @@ ], "infantry_units": [ "Paratrooper_AKS", - "Paratrooper_RPG_16" + "Paratrooper_RPG_16", + "SAM_SA_18_Igla_S_MANPADS" ], "air_defenses": [ "SA9Generator", diff --git a/resources/factions/pmc_us.json b/resources/factions/pmc_us.json index bfa0b96c..e75e193f 100644 --- a/resources/factions/pmc_us.json +++ b/resources/factions/pmc_us.json @@ -20,7 +20,8 @@ ], "infantry_units": [ "Infantry_M4", - "Soldier_M249" + "Soldier_M249", + "Stinger_MANPADS" ], "air_defenses": [ "AvengerGenerator" diff --git a/resources/factions/pmc_us_with_mb339.json b/resources/factions/pmc_us_with_mb339.json index a8a05395..ef01e093 100644 --- a/resources/factions/pmc_us_with_mb339.json +++ b/resources/factions/pmc_us_with_mb339.json @@ -21,7 +21,8 @@ ], "infantry_units": [ "Infantry_M4", - "Soldier_M249" + "Soldier_M249", + "Stinger_MANPADS" ], "air_defenses": [ "AvengerGenerator" diff --git a/resources/factions/russia_1990.json b/resources/factions/russia_1990.json index 912a5010..dd9048bd 100644 --- a/resources/factions/russia_1990.json +++ b/resources/factions/russia_1990.json @@ -42,7 +42,8 @@ "infantry_units": [ "Paratrooper_AKS", "Infantry_Soldier_Rus", - "Paratrooper_RPG_16" + "Paratrooper_RPG_16", + "SAM_SA_18_Igla_S_MANPADS" ], "air_defenses": [ "SA2Generator", diff --git a/resources/factions/russia_2010.json b/resources/factions/russia_2010.json index 1c7b86a4..cc2631df 100644 --- a/resources/factions/russia_2010.json +++ b/resources/factions/russia_2010.json @@ -46,7 +46,8 @@ "infantry_units": [ "Paratrooper_AKS", "Infantry_Soldier_Rus", - "Paratrooper_RPG_16" + "Paratrooper_RPG_16", + "SAM_SA_18_Igla_MANPADS" ], "air_defenses": [ "SA8Generator", diff --git a/resources/factions/russia_2020.json b/resources/factions/russia_2020.json index 3bb952d9..b1c45b8a 100644 --- a/resources/factions/russia_2020.json +++ b/resources/factions/russia_2020.json @@ -45,7 +45,8 @@ "infantry_units": [ "Paratrooper_AKS", "Infantry_Soldier_Rus", - "Paratrooper_RPG_16" + "Paratrooper_RPG_16", + "SAM_SA_18_Igla_S_MANPADS" ], "air_defenses": [ "SA8Generator", diff --git a/resources/factions/sweden_1990.json b/resources/factions/sweden_1990.json index 86acb4af..c5d78b6e 100644 --- a/resources/factions/sweden_1990.json +++ b/resources/factions/sweden_1990.json @@ -26,7 +26,8 @@ ], "infantry_units": [ "Infantry_M4", - "Soldier_M249" + "Soldier_M249", + "Stinger_MANPADS" ], "air_defenses": [ "AvengerGenerator", diff --git a/resources/factions/syria_2011.json b/resources/factions/syria_2011.json index 1aa8f834..c87160d1 100644 --- a/resources/factions/syria_2011.json +++ b/resources/factions/syria_2011.json @@ -46,7 +46,8 @@ "infantry_units": [ "Paratrooper_AKS", "Infantry_Soldier_Rus", - "Paratrooper_RPG_16" + "Paratrooper_RPG_16", + "SAM_SA_18_Igla_S_MANPADS" ], "air_defenses": [ "ColdWarFlakGenerator", @@ -59,10 +60,7 @@ "SA10Generator", "SA11Generator", "SA13Generator", - "SA15Generator", "SA19Generator", - "Tier2SA10Generator", - "Tier3SA10Generator", "ZSU23Generator", "ZU23Generator", "ZU23UralGenerator" diff --git a/resources/factions/turkey_2005.json b/resources/factions/turkey_2005.json index 9ee72b51..0a11e63a 100644 --- a/resources/factions/turkey_2005.json +++ b/resources/factions/turkey_2005.json @@ -32,7 +32,8 @@ "infantry_units": [ "Infantry_M4", "Soldier_M249", - "Paratrooper_AKS" + "Paratrooper_AKS", + "SAM_SA_18_Igla_S_MANPADS" ], "air_defenses": [ "AvengerGenerator", diff --git a/resources/factions/uae_2005.json b/resources/factions/uae_2005.json index 3c1a42f4..bff684e0 100644 --- a/resources/factions/uae_2005.json +++ b/resources/factions/uae_2005.json @@ -28,7 +28,8 @@ ], "infantry_units": [ "Infantry_M4", - "Soldier_M249" + "Soldier_M249", + "SAM_SA_18_Igla_S_MANPADS" ], "air_defenses": [ "HawkGenerator", diff --git a/resources/factions/uk_1990.json b/resources/factions/uk_1990.json index 95ec74cc..b3db7880 100644 --- a/resources/factions/uk_1990.json +++ b/resources/factions/uk_1990.json @@ -32,7 +32,8 @@ ], "infantry_units": [ "Infantry_M4", - "Soldier_M249" + "Soldier_M249", + "Stinger_MANPADS" ], "air_defenses": [ "AvengerGenerator", diff --git a/resources/factions/ukraine_2010.json b/resources/factions/ukraine_2010.json index b635da57..dac93cb8 100644 --- a/resources/factions/ukraine_2010.json +++ b/resources/factions/ukraine_2010.json @@ -36,7 +36,8 @@ "infantry_units": [ "Paratrooper_AKS", "Infantry_Soldier_Rus", - "Paratrooper_RPG_16" + "Paratrooper_RPG_16", + "SAM_SA_18_Igla_S_MANPADS" ], "air_defenses": [ "SA3Generator", diff --git a/resources/factions/usa_1990.json b/resources/factions/usa_1990.json index 8aa7f6c7..dfe64438 100644 --- a/resources/factions/usa_1990.json +++ b/resources/factions/usa_1990.json @@ -43,7 +43,8 @@ ], "infantry_units": [ "Infantry_M4", - "Soldier_M249" + "Soldier_M249", + "Stinger_MANPADS" ], "air_defenses": [ "AvengerGenerator", diff --git a/resources/factions/usa_2005.json b/resources/factions/usa_2005.json index 753f6059..5ebe5d1c 100644 --- a/resources/factions/usa_2005.json +++ b/resources/factions/usa_2005.json @@ -43,7 +43,8 @@ ], "infantry_units": [ "Infantry_M4", - "Soldier_M249" + "Soldier_M249", + "Stinger_MANPADS" ], "air_defenses": [ "AvengerGenerator", diff --git a/resources/factions/usa_2005_modded.json b/resources/factions/usa_2005_modded.json index cbc94f2e..e4839515 100644 --- a/resources/factions/usa_2005_modded.json +++ b/resources/factions/usa_2005_modded.json @@ -44,7 +44,8 @@ ], "infantry_units": [ "Infantry_M4", - "Soldier_M249" + "Soldier_M249", + "Stinger_MANPADS" ], "air_defenses": [ "AvengerGenerator", diff --git a/resources/factions/usn_1985.json b/resources/factions/usn_1985.json index 525f2bf8..55bc56e5 100644 --- a/resources/factions/usn_1985.json +++ b/resources/factions/usn_1985.json @@ -31,7 +31,8 @@ ], "infantry_units": [ "Infantry_M4", - "Soldier_M249" + "Soldier_M249", + "Stinger_MANPADS" ], "air_defenses": [ "ChaparralGenerator",