diff --git a/changelog.md b/changelog.md index ef29ddb1..5647743f 100644 --- a/changelog.md +++ b/changelog.md @@ -5,9 +5,21 @@ Saves from 2.3 are not compatible with 2.4. ## Features/Improvements * **[Flight Planner]** Air-to-air and SEAD escorts will no longer be automatically planned for packages that are not in range of threats. + +# 2.3.3 + +## Features/Improvements +* **[Campaigns]** Reworked Golan Heights campaign on Syria, (Added FOB and preset locations for SAMS) +* **[Campaigns]** Added a lite version of the Golan Heights campaign +* **[Campaigns]** Reworked Syrian Civil War campaign (Added FOB and preset locations for SAMS) +* **[Factions]** Updated Nato Desert Storm to include F-14A +* **[Factions]** Updated Iraq 1991 factions to include Zsu-57 and Mig-29A * **[Plugins]** [The EWRS plugin](https://github.com/Bob7heBuilder/EWRS) is now included. -## Fixes +## Fixes: +* **[Factions]** AI would never buy artillery units for the frontline - fixed +* **[Factions]** Removed the F-111 unit from the NATO desert storm faction. (Recruiting it would cause crashes in DCS, since it is not a valid unit) +* **[Units]** Fixed SPG_Stryker_M1128_MGS not being in db # 2.3.2 diff --git a/game/db.py b/game/db.py index 7f4f6f92..79c364c5 100644 --- a/game/db.py +++ b/game/db.py @@ -389,6 +389,7 @@ PRICES = { Armor.ATGM_M1045_HMMWV_TOW: 8, Armor.IFV_M2A2_Bradley: 12, Armor.APC_M1126_Stryker_ICV: 10, + Armor.SPG_M1128_Stryker_MGS: 14, Armor.ATGM_M1134_Stryker: 12, Armor.MBT_M60A3_Patton: 16, Armor.MBT_M1A2_Abrams: 25, @@ -765,6 +766,7 @@ UNIT_BY_TASK = { Armor.APC_M1126_Stryker_ICV, Armor.APC_M1126_Stryker_ICV, Armor.APC_M1126_Stryker_ICV, + Armor.SPG_M1128_Stryker_MGS, Armor.IFV_MCV_80, Armor.IFV_MCV_80, Armor.IFV_MCV_80, @@ -847,6 +849,23 @@ UNIT_BY_TASK = { Artillery.M12_GMC, Artillery.Sturmpanzer_IV_Brummbär, + AirDefence.AAA_ZU_23_on_Ural_375, + AirDefence.AAA_ZU_23_Insurgent_on_Ural_375, + AirDefence.AAA_ZSU_57_2, + AirDefence.SPAAA_ZSU_23_4_Shilka, + AirDefence.SAM_SA_8_Osa_9A33, + AirDefence.SAM_SA_9_Strela_1_9P31, + AirDefence.SAM_SA_13_Strela_10M3_9A35M3, + AirDefence.SAM_SA_15_Tor_9A331, + AirDefence.SAM_SA_19_Tunguska_2S6, + AirDefence.SPAAA_Gepard, + AirDefence.AAA_Vulcan_M163, + AirDefence.SAM_Linebacker_M6, + AirDefence.SAM_Chaparral_M48, + AirDefence.SAM_Avenger_M1097, + AirDefence.SAM_Roland_ADS, + AirDefence.HQ_7_Self_Propelled_LN, + frenchpack.DIM__TOYOTA_BLUE, frenchpack.DIM__TOYOTA_DESERT, frenchpack.DIM__TOYOTA_GREEN, @@ -872,23 +891,6 @@ UNIT_BY_TASK = { ], AirDefence: [ - - # those are listed multiple times here to balance prioritization more into lower tier AAs - AirDefence.AAA_Vulcan_M163, - AirDefence.AAA_Vulcan_M163, - AirDefence.AAA_Vulcan_M163, - AirDefence.SAM_Linebacker_M6, - - AirDefence.SPAAA_ZSU_23_4_Shilka, - AirDefence.AAA_ZU_23_Closed, - AirDefence.SAM_SA_9_Strela_1_9P31, - AirDefence.SAM_SA_8_Osa_9A33, - AirDefence.SAM_SA_19_Tunguska_2S6, - AirDefence.SAM_SA_6_Kub_LN_2P25, - AirDefence.SAM_SA_3_S_125_LN_5P73, - AirDefence.SAM_Hawk_PCP, - AirDefence.SAM_SA_2_LN_SM_90, - AirDefence.SAM_SA_11_Buk_LN_9A310M1, ], Reconnaissance: [Unarmed.Transport_M818, Unarmed.Transport_Ural_375, Unarmed.Transport_UAZ_469], Nothing: [Infantry.Infantry_M4, Infantry.Soldier_AK, ], diff --git a/game/procurement.py b/game/procurement.py index e528df01..8303aaff 100644 --- a/game/procurement.py +++ b/game/procurement.py @@ -1,8 +1,8 @@ from __future__ import annotations -from dataclasses import dataclass import math import random +from dataclasses import dataclass from typing import Iterator, List, Optional, TYPE_CHECKING, Type from dcs.task import CAP, CAS @@ -75,15 +75,25 @@ class ProcurementAi: return budget def random_affordable_ground_unit( - self, budget: int) -> Optional[Type[VehicleType]]: - affordable_units = [u for u in self.faction.frontline_units if + self, budget: int, cp: ControlPoint) -> Optional[Type[VehicleType]]: + affordable_units = [u for u in self.faction.frontline_units + self.faction.artillery_units if db.PRICES[u] <= budget] + + total_number_aa = cp.base.total_frontline_aa + cp.pending_frontline_aa_deliveries_count + total_non_aa = cp.base.total_armor + cp.pending_deliveries_count - total_number_aa + max_aa = math.ceil(total_non_aa/8) + + # Limit the number of AA units the AI will buy + if not total_number_aa < max_aa: + for unit in [u for u in affordable_units if u in TYPE_SHORAD]: + affordable_units.remove(unit) + if not affordable_units: return None return random.choice(affordable_units) def reinforce_front_line(self, budget: int) -> int: - if not self.faction.frontline_units: + if not self.faction.frontline_units and not self.faction.artillery_units: return budget while budget > 0: @@ -92,7 +102,7 @@ class ProcurementAi: break cp = random.choice(candidates) - unit = self.random_affordable_ground_unit(budget) + unit = self.random_affordable_ground_unit(budget, cp) if unit is None: # Can't afford any more units. break diff --git a/game/theater/base.py b/game/theater/base.py index 54b0e4f8..9f0ebe8f 100644 --- a/game/theater/base.py +++ b/game/theater/base.py @@ -9,6 +9,7 @@ from dcs.unittype import FlyingType, UnitType, VehicleType from dcs.vehicles import AirDefence, Armor from game import db +from gen.ground_forces.ai_ground_planner_db import TYPE_SHORAD STRENGTH_AA_ASSEMBLE_MIN = 0.2 PLANES_SCRAMBLE_MIN_BASE = 2 @@ -36,6 +37,10 @@ class Base: def total_armor(self) -> int: return sum(self.armor.values()) + @property + def total_frontline_aa(self) -> int: + return sum([v for k, v in self.armor.items() if k in TYPE_SHORAD]) + @property def total_aa(self) -> int: return sum(self.aa.values()) diff --git a/game/theater/controlpoint.py b/game/theater/controlpoint.py index 3ec23ede..229531d0 100644 --- a/game/theater/controlpoint.py +++ b/game/theater/controlpoint.py @@ -20,6 +20,7 @@ from dcs.terrain.terrain import Airport, ParkingSlot from dcs.unittype import FlyingType from game import db +from gen.ground_forces.ai_ground_planner_db import TYPE_SHORAD from gen.runways import RunwayAssigner, RunwayData from gen.ground_forces.combat_stance import CombatStance from .base import Base @@ -457,6 +458,26 @@ class ControlPoint(MissionTarget, ABC): u.position.x = u.position.x + delta.x u.position.y = u.position.y + delta.y + @property + def pending_frontline_aa_deliveries_count(self): + """ + Get number of pending frontline aa units + """ + if self.pending_unit_deliveries: + return sum([v for k,v in self.pending_unit_deliveries.units.items() if k in TYPE_SHORAD]) + else: + return 0 + + @property + def pending_deliveries_count(self): + """ + Get number of pending units + """ + if self.pending_unit_deliveries: + return sum([v for k, v in self.pending_unit_deliveries.units.items()]) + else: + return 0 + class Airfield(ControlPoint): diff --git a/gen/armor.py b/gen/armor.py index c02abecf..e6b73e54 100644 --- a/gen/armor.py +++ b/gen/armor.py @@ -675,12 +675,14 @@ class GroundConflictGenerator: else: g.set_skill(self.game.settings.enemy_vehicle_skill) positioned_groups.append((g, group)) - self.gen_infantry_group_for_group( - g, - is_player, - self.mission.country(country), - opposite_heading(spawn_heading) - ) + + if group.role in [CombatGroupRole.APC, CombatGroupRole.IFV]: + self.gen_infantry_group_for_group( + g, + is_player, + self.mission.country(country), + opposite_heading(spawn_heading) + ) else: logging.warning(f"Unable to get valid position for {group}") diff --git a/gen/ground_forces/ai_ground_planner.py b/gen/ground_forces/ai_ground_planner.py index 650f17cd..e98d82d2 100644 --- a/gen/ground_forces/ai_ground_planner.py +++ b/gen/ground_forces/ai_ground_planner.py @@ -3,180 +3,14 @@ from enum import Enum from typing import Dict, List from dcs.unittype import VehicleType -from dcs.vehicles import Armor, Artillery, Infantry, Unarmed -import pydcs_extensions.frenchpack.frenchpack as frenchpack from game.theater import ControlPoint +from gen.ground_forces.ai_ground_planner_db import * from gen.ground_forces.combat_stance import CombatStance -TYPE_TANKS = [ - Armor.MBT_T_55, - Armor.MBT_T_72B, - Armor.MBT_T_72B3, - Armor.MBT_T_80U, - Armor.MBT_T_90, - Armor.MBT_Leopard_2, - Armor.MBT_Leopard_1A3, - Armor.MBT_Leclerc, - Armor.MBT_Challenger_II, - Armor.MBT_M1A2_Abrams, - Armor.MBT_M60A3_Patton, - Armor.MBT_Merkava_Mk__4, - Armor.ZTZ_96B, - - # WW2 - Armor.MT_Pz_Kpfw_V_Panther_Ausf_G, - Armor.MT_Pz_Kpfw_IV_Ausf_H, - Armor.HT_Pz_Kpfw_VI_Tiger_I, - Armor.HT_Pz_Kpfw_VI_Ausf__B_Tiger_II, - Armor.MT_M4_Sherman, - Armor.MT_M4A4_Sherman_Firefly, - Armor.StuG_IV, - Armor.CT_Centaur_IV, - Armor.CT_Cromwell_IV, - Armor.HIT_Churchill_VII, - Armor.LT_Mk_VII_Tetrarch, - - # Mods - frenchpack.DIM__TOYOTA_BLUE, - frenchpack.DIM__TOYOTA_GREEN, - frenchpack.DIM__TOYOTA_DESERT, - frenchpack.DIM__KAMIKAZE, - - frenchpack.AMX_10RCR, - frenchpack.AMX_10RCR_SEPAR, - frenchpack.AMX_30B2, - frenchpack.Leclerc_Serie_XXI, - -] - -TYPE_ATGM = [ - Armor.ATGM_M1045_HMMWV_TOW, - Armor.ATGM_M1134_Stryker, - Armor.IFV_BMP_2, - - # WW2 (Tank Destroyers) - Armor.M30_Cargo_Carrier, - Armor.TD_Jagdpanzer_IV, - Armor.TD_Jagdpanther_G1, - Armor.TD_M10_GMC, - - # Mods - frenchpack.VBAE_CRAB_MMP, - frenchpack.VAB_MEPHISTO, - frenchpack.TRM_2000_PAMELA, - -] - -TYPE_IFV = [ - Armor.IFV_BMP_3, - Armor.IFV_BMP_2, - Armor.IFV_BMP_1, - Armor.IFV_Marder, - Armor.IFV_MCV_80, - Armor.IFV_LAV_25, - Armor.AC_Sd_Kfz_234_2_Puma, - Armor.IFV_M2A2_Bradley, - Armor.IFV_BMD_1, - Armor.ZBD_04A, - - # WW2 - Armor.AC_Sd_Kfz_234_2_Puma, - Armor.LAC_M8_Greyhound, - Armor.Daimler_Armoured_Car, - - # Mods - frenchpack.ERC_90, - frenchpack.VBAE_CRAB, - frenchpack.VAB_T20_13 - -] - -TYPE_APC = [ - Armor.APC_M1043_HMMWV_Armament, - Armor.APC_M1126_Stryker_ICV, - Armor.APC_M113, - Armor.APC_BTR_80, - Armor.APC_BTR_82A, - Armor.APC_MTLB, - Armor.APC_M2A1, - Armor.APC_Cobra, - Armor.APC_Sd_Kfz_251, - Armor.APC_AAV_7, - Armor.TPz_Fuchs, - Armor.ARV_BRDM_2, - Armor.ARV_BTR_RD, - Armor.FDDM_Grad, - - # WW2 - Armor.APC_M2A1, - Armor.APC_Sd_Kfz_251, - - # Mods - frenchpack.VAB__50, - frenchpack.VBL__50, - frenchpack.VBL_AANF1, - -] - -TYPE_ARTILLERY = [ - Artillery.MLRS_9A52_Smerch, - Artillery.SPH_2S1_Gvozdika, - Artillery.SPH_2S3_Akatsia, - Artillery.MLRS_BM_21_Grad, - Artillery.MLRS_9K57_Uragan_BM_27, - Artillery.SPH_M109_Paladin, - Artillery.MLRS_M270, - Artillery.SPH_2S9_Nona, - Artillery.SpGH_Dana, - Artillery.SPH_2S19_Msta, - Artillery.MLRS_FDDM, - - # WW2 - Artillery.Sturmpanzer_IV_Brummbär, - Artillery.M12_GMC -] - -TYPE_LOGI = [ - Unarmed.Transport_M818, - Unarmed.Transport_KAMAZ_43101, - Unarmed.Transport_Ural_375, - Unarmed.Transport_GAZ_66, - Unarmed.Transport_GAZ_3307, - Unarmed.Transport_GAZ_3308, - Unarmed.Transport_Ural_4320_31_Armored, - Unarmed.Transport_Ural_4320T, - Unarmed.Blitz_3_6_6700A, - Unarmed.Kübelwagen_82, - Unarmed.Sd_Kfz_7, - Unarmed.Sd_Kfz_2, - Unarmed.Willys_MB, - Unarmed.Land_Rover_109_S3, - Unarmed.Land_Rover_101_FC, - - # Mods - frenchpack.VBL, - frenchpack.VAB, - -] - -TYPE_INFANTRY = [ - Infantry.Infantry_Soldier_Insurgents, - Infantry.Soldier_AK, - Infantry.Infantry_M1_Garand, - Infantry.Infantry_Mauser_98, - Infantry.Infantry_SMLE_No_4_Mk_1, - Infantry.Georgian_soldier_with_M4, - Infantry.Infantry_Soldier_Rus, - Infantry.Paratrooper_AKS, - Infantry.Paratrooper_RPG_16, - Infantry.Soldier_M249, - Infantry.Infantry_M4, - Infantry.Soldier_RPG, -] - MAX_COMBAT_GROUP_PER_CP = 10 + class CombatGroupRole(Enum): TANK = 1 APC = 2 @@ -224,6 +58,7 @@ class CombatGroup: s += "UNITS " + self.units[0].name + " * " + str(len(self.units)) return s + class GroundPlanner: def __init__(self, cp:ControlPoint, game): @@ -243,7 +78,6 @@ class GroundPlanner: self.units_per_cp[cp.id] = [] self.reserve: List[CombatGroup] = [] - def plan_groundwar(self): if hasattr(self.cp, 'stance'): @@ -275,6 +109,9 @@ class GroundPlanner: elif key in TYPE_ATGM: collection = self.atgm_group role = CombatGroupRole.ATGM + elif key in TYPE_SHORAD: + collection = self.shorad_groups + role = CombatGroupRole.SHORAD else: print("Warning unit type not handled by ground generator") print(key) @@ -282,12 +119,16 @@ class GroundPlanner: available = self.cp.base.armor[key] while available > 0: - n = random.choice(group_size_choice) - if n > available: - if available >= 2: - n = 2 - else: - n = 1 + + if role == CombatGroupRole.SHORAD: + n = 1 + else: + n = random.choice(group_size_choice) + if n > available: + if available >= 2: + n = 2 + else: + n = 1 available -= n group = CombatGroup(role) diff --git a/gen/ground_forces/ai_ground_planner_db.py b/gen/ground_forces/ai_ground_planner_db.py new file mode 100644 index 00000000..794cb128 --- /dev/null +++ b/gen/ground_forces/ai_ground_planner_db.py @@ -0,0 +1,197 @@ +from dcs.vehicles import AirDefence, Infantry, Unarmed, Artillery, Armor + +from pydcs_extensions.frenchpack import frenchpack + +TYPE_TANKS = [ + Armor.MBT_T_55, + Armor.MBT_T_72B, + Armor.MBT_T_72B3, + Armor.MBT_T_80U, + Armor.MBT_T_90, + Armor.MBT_Leopard_2, + Armor.MBT_Leopard_1A3, + Armor.MBT_Leclerc, + Armor.MBT_Challenger_II, + Armor.MBT_M1A2_Abrams, + Armor.MBT_M60A3_Patton, + Armor.MBT_Merkava_Mk__4, + Armor.ZTZ_96B, + + # WW2 + Armor.MT_Pz_Kpfw_V_Panther_Ausf_G, + Armor.MT_Pz_Kpfw_IV_Ausf_H, + Armor.HT_Pz_Kpfw_VI_Tiger_I, + Armor.HT_Pz_Kpfw_VI_Ausf__B_Tiger_II, + Armor.MT_M4_Sherman, + Armor.MT_M4A4_Sherman_Firefly, + Armor.StuG_IV, + Armor.CT_Centaur_IV, + Armor.CT_Cromwell_IV, + Armor.HIT_Churchill_VII, + Armor.LT_Mk_VII_Tetrarch, + + # Mods + frenchpack.DIM__TOYOTA_BLUE, + frenchpack.DIM__TOYOTA_GREEN, + frenchpack.DIM__TOYOTA_DESERT, + frenchpack.DIM__KAMIKAZE, + + frenchpack.AMX_10RCR, + frenchpack.AMX_10RCR_SEPAR, + frenchpack.AMX_30B2, + frenchpack.Leclerc_Serie_XXI, + +] + +TYPE_ATGM = [ + Armor.ATGM_M1045_HMMWV_TOW, + Armor.ATGM_M1134_Stryker, + Armor.IFV_BMP_2, + + # WW2 (Tank Destroyers) + Armor.M30_Cargo_Carrier, + Armor.TD_Jagdpanzer_IV, + Armor.TD_Jagdpanther_G1, + Armor.TD_M10_GMC, + + # Mods + frenchpack.VBAE_CRAB_MMP, + frenchpack.VAB_MEPHISTO, + frenchpack.TRM_2000_PAMELA, + +] + +TYPE_IFV = [ + Armor.IFV_BMP_3, + Armor.IFV_BMP_2, + Armor.IFV_BMP_1, + Armor.IFV_Marder, + Armor.IFV_MCV_80, + Armor.IFV_LAV_25, + Armor.SPG_M1128_Stryker_MGS, + Armor.AC_Sd_Kfz_234_2_Puma, + Armor.IFV_M2A2_Bradley, + Armor.IFV_BMD_1, + Armor.ZBD_04A, + + # WW2 + Armor.AC_Sd_Kfz_234_2_Puma, + Armor.LAC_M8_Greyhound, + Armor.Daimler_Armoured_Car, + + # Mods + frenchpack.ERC_90, + frenchpack.VBAE_CRAB, + frenchpack.VAB_T20_13 + +] + +TYPE_APC = [ + Armor.APC_M1043_HMMWV_Armament, + Armor.APC_M1126_Stryker_ICV, + Armor.APC_M113, + Armor.APC_BTR_80, + Armor.APC_BTR_82A, + Armor.APC_MTLB, + Armor.APC_M2A1, + Armor.APC_Cobra, + Armor.APC_Sd_Kfz_251, + Armor.APC_AAV_7, + Armor.TPz_Fuchs, + Armor.ARV_BRDM_2, + Armor.ARV_BTR_RD, + Armor.FDDM_Grad, + + # WW2 + Armor.APC_M2A1, + Armor.APC_Sd_Kfz_251, + + # Mods + frenchpack.VAB__50, + frenchpack.VBL__50, + frenchpack.VBL_AANF1, + +] + +TYPE_ARTILLERY = [ + Artillery.MLRS_9A52_Smerch, + Artillery.SPH_2S1_Gvozdika, + Artillery.SPH_2S3_Akatsia, + Artillery.MLRS_BM_21_Grad, + Artillery.MLRS_9K57_Uragan_BM_27, + Artillery.SPH_M109_Paladin, + Artillery.MLRS_M270, + Artillery.SPH_2S9_Nona, + Artillery.SpGH_Dana, + Artillery.SPH_2S19_Msta, + Artillery.MLRS_FDDM, + + # WW2 + Artillery.Sturmpanzer_IV_Brummbär, + Artillery.M12_GMC +] + +TYPE_LOGI = [ + Unarmed.Transport_M818, + Unarmed.Transport_KAMAZ_43101, + Unarmed.Transport_Ural_375, + Unarmed.Transport_GAZ_66, + Unarmed.Transport_GAZ_3307, + Unarmed.Transport_GAZ_3308, + Unarmed.Transport_Ural_4320_31_Armored, + Unarmed.Transport_Ural_4320T, + Unarmed.Blitz_3_6_6700A, + Unarmed.Kübelwagen_82, + Unarmed.Sd_Kfz_7, + Unarmed.Sd_Kfz_2, + Unarmed.Willys_MB, + Unarmed.Land_Rover_109_S3, + Unarmed.Land_Rover_101_FC, + + # Mods + frenchpack.VBL, + frenchpack.VAB, + +] + +TYPE_INFANTRY = [ + Infantry.Infantry_Soldier_Insurgents, + Infantry.Soldier_AK, + Infantry.Infantry_M1_Garand, + Infantry.Infantry_Mauser_98, + Infantry.Infantry_SMLE_No_4_Mk_1, + Infantry.Georgian_soldier_with_M4, + Infantry.Infantry_Soldier_Rus, + Infantry.Paratrooper_AKS, + Infantry.Paratrooper_RPG_16, + Infantry.Soldier_M249, + Infantry.Infantry_M4, + Infantry.Soldier_RPG, +] + +TYPE_SHORAD = [ + AirDefence.AAA_ZU_23_on_Ural_375, + AirDefence.AAA_ZU_23_Insurgent_on_Ural_375, + AirDefence.AAA_ZSU_57_2, + AirDefence.SPAAA_ZSU_23_4_Shilka, + AirDefence.SAM_SA_8_Osa_9A33, + AirDefence.SAM_SA_9_Strela_1_9P31, + AirDefence.SAM_SA_13_Strela_10M3_9A35M3, + AirDefence.SAM_SA_15_Tor_9A331, + AirDefence.SAM_SA_19_Tunguska_2S6, + + AirDefence.SPAAA_Gepard, + AirDefence.AAA_Vulcan_M163, + AirDefence.SAM_Linebacker_M6, + AirDefence.SAM_Chaparral_M48, + AirDefence.SAM_Avenger_M1097, + AirDefence.SAM_Roland_ADS, + AirDefence.HQ_7_Self_Propelled_LN, + + AirDefence.AAA_8_8cm_Flak_18, + AirDefence.AAA_8_8cm_Flak_41, + AirDefence.AAA_Bofors_40mm, + AirDefence.AAA_M1_37mm, + AirDefence.AA_gun_QF_3_7, + +] diff --git a/pydcs b/pydcs index edc87fab..059c88c9 160000 --- a/pydcs +++ b/pydcs @@ -1 +1 @@ -Subproject commit edc87fab1d65d4e4153c84006f537e6ae6b0671a +Subproject commit 059c88c91b5be4b5b6406249a52527c3ccea3db9 diff --git a/qt_ui/widgets/map/QMapObject.py b/qt_ui/widgets/map/QMapObject.py index 16f07061..a12feb33 100644 --- a/qt_ui/widgets/map/QMapObject.py +++ b/qt_ui/widgets/map/QMapObject.py @@ -47,7 +47,7 @@ class QMapObject(QGraphicsRectItem): object_details_action.triggered.connect(self.on_click) menu.addAction(object_details_action) - # Not all locations have valid objetives. Off-map spawns, for example, + # Not all locations have valid objectives. Off-map spawns, for example, # have no mission types. if list(self.mission_target.mission_types(for_player=True)): new_package_action = QAction(f"New package") diff --git a/resources/campaigns/golan_heights.json b/resources/campaigns/golan_heights.json new file mode 100644 index 00000000..01973830 --- /dev/null +++ b/resources/campaigns/golan_heights.json @@ -0,0 +1,7 @@ +{ + "name": "Syria - Battle for Golan Heights", + "theater": "Syria", + "authors": "Khopa", + "description": "
In this scenario, you start in Israel and the conflict is focused around the golan heights, an historically disputed territory.
You can use the inverted configuration to start on the Syrian side.
If this scenario is too heavy, try the lite version.
In this scenario, you start in Israel and the conflict is focused around the golan heights, an historically disputed territory.
", - "player_points": [ - { - "type": "airbase", - "id": "Ramat David", - "size": 1000, - "importance": 1.4 - }, - { - "type": "carrier", - "id": 1001, - "x": -280000, - "y": -238000, - "captured_invert": true - }, - { - "type": "lha", - "id": 1002, - "x": -237000, - "y": -89800, - "captured_invert": true - } - ], - "enemy_points": [ - { - "type": "airbase", - "id": "Khalkhalah", - "size": 1000, - "importance": 1.2 - }, - { - "type": "airbase", - "id": "King Hussein Air College", - "size": 1000, - "importance": 1.4 - }, - { - "type": "airbase", - "id": "Marj Ruhayyil", - "size": 1000, - "importance": 1 - }, - { - "type": "airbase", - "id": "Mezzeh", - "size": 1000, - "importance": 1.2 - }, - { - "type": "airbase", - "id": "Al-Dumayr", - "size": 1000, - "importance": 1.2, - "captured_invert": true - } - ], - "links": [ - [ - "Khalkhalah", - "Ramat David" - ], - [ - "Khalkhalah", - "King Hussein Air College" - ], - [ - "Khalkhalah", - "Marj Ruhayyil" - ], - [ - "Marj Ruhayyil", - "Mezzeh" - ], - [ - "Al-Dumayr", - "Marj Ruhayyil" - ] - ] -} \ No newline at end of file diff --git a/resources/campaigns/golan_heights_lite.json b/resources/campaigns/golan_heights_lite.json index f0f9ab79..1abd6641 100644 --- a/resources/campaigns/golan_heights_lite.json +++ b/resources/campaigns/golan_heights_lite.json @@ -1,7 +1,7 @@ { - "name": "Syria - Golan heights lite", + "name": "Syria - Battle for Golan Heights - Lite", "theater": "Syria", "authors": "Khopa", - "description": "In this scenario, you start in Israel and the conflict is focused around the golan heights, an historically disputed territory. This scenario is designed to be performance friendly.
", + "description": "In this scenario, you start in Israel and the conflict is focused around the golan heights, an historically disputed territory.
This scenario is designed to be performance friendly.
This scenario can be used to simulate parts of the Syrian Civil War.
", - "player_points": [ - { - "type": "airbase", - "id": "Bassel Al-Assad", - "size": 1000, - "importance": 1.4 - }, - { - "type": "airbase", - "id": "Marj Ruhayyil", - "size": 1000, - "importance": 1 - }, - { - "type": "carrier", - "id": 1001, - "x": 18537, - "y": -52000, - "captured_invert": true - }, - { - "type": "lha", - "id": 1002, - "x": 116000, - "y": -30000, - "captured_invert": true - } - ], - "enemy_points": [ - { - "type": "airbase", - "id": "Hama", - "size": 1000, - "importance": 1 - }, - { - "type": "airbase", - "id": "Aleppo", - "size": 1000, - "importance": 1.2, - "captured_invert": true - }, - { - "type": "airbase", - "id": "Al Qusayr", - "size": 1000, - "importance": 1 - }, - { - "type": "airbase", - "id": "Palmyra", - "size": 1000, - "importance": 1 - }, - { - "type": "airbase", - "id": "Al-Dumayr", - "size": 1000, - "importance": 1.2 - } - ], - "links": [ - [ - "Bassel Al-Assad", - "Hama" - ], - [ - "Al-Dumayr", - "Marj Ruhayyil" - ], - [ - "Aleppo", - "Hama" - ], - [ - "Al Qusayr", - "Hama" - ], - [ - "Al Qusayr", - "Al-Dumayr" - ], - [ - "Al Qusayr", - "Palmyra" - ] - ] + "description": "This scenario can be used to simulate parts of the Syrian Civil War.
You start on the coast with an airbase in Latakia, and ground forces in Tartus.
This scenario can also be used to simulate a western invasion of Syria.
In inverted configuration you start in Aleppo.
Insurgents faction.
", + "aircrafts": [ + ], + "frontline_units": [ + "ATGM_M1045_HMMWV_TOW", + "APC_M1043_HMMWV_Armament", + "ARV_BRDM_2", + "APC_BTR_80", + "ARV_BTR_RD", + "IFV_BMP_1", + "MBT_T_55", + "AAA_ZU_23_Insurgent_on_Ural_375", + "AAA_ZSU_57_2", + "AAA_ZSU_57_2" + ], + "artillery_units": [ + "MLRS_BM_21_Grad", + "SPH_2S19_Msta" + ], + "logistics_units": [ + "Transport_Ural_375", + "Transport_UAZ_469" + ], + "infantry_units": [ + "Infantry_Soldier_Insurgents", + "Soldier_RPG", + "SAM_SA_18_Igla_MANPADS" + ], + "air_defenses": [ + "SA9Generator", + "ZSU57Generator", + "ZU23Generator", + "ZU23UralInsurgentGenerator" + ] +} diff --git a/resources/factions/iran_2015.json b/resources/factions/iran_2015.json index cb6ba5f2..b8621de2 100644 --- a/resources/factions/iran_2015.json +++ b/resources/factions/iran_2015.json @@ -27,7 +27,9 @@ "APC_BTR_80", "MBT_M60A3_Patton", "IFV_BMP_1", - "MBT_T_72B" + "MBT_T_72B", + "SPAAA_ZSU_23_4_Shilka", + "AAA_ZSU_57_2" ], "artillery_units": [ "MLRS_BM_21_Grad", diff --git a/resources/factions/iraq_1991.json b/resources/factions/iraq_1991.json index 9fc32ce6..0ff517ee 100644 --- a/resources/factions/iraq_1991.json +++ b/resources/factions/iraq_1991.json @@ -33,7 +33,8 @@ "APC_BTR_80", "ARV_BRDM_2", "SPH_2S1_Gvozdika", - "AAA_ZSU_57_2" + "AAA_ZSU_57_2", + "SPAAA_ZSU_23_4_Shilka" ], "artillery_units": [ "MLRS_BM_21_Grad" diff --git a/resources/factions/israel_1948.json b/resources/factions/israel_1948.json index b2c86e7b..5f296689 100644 --- a/resources/factions/israel_1948.json +++ b/resources/factions/israel_1948.json @@ -15,7 +15,8 @@ "MT_M4A4_Sherman_Firefly", "APC_M2A1", "MT_M4_Sherman", - "LAC_M8_Greyhound" + "LAC_M8_Greyhound", + "AAA_Bofors_40mm" ], "artillery_units": [ ], diff --git a/resources/factions/israel_1973.json b/resources/factions/israel_1973.json index c0d3482b..b3b30840 100644 --- a/resources/factions/israel_1973.json +++ b/resources/factions/israel_1973.json @@ -19,7 +19,8 @@ "MT_M4_Sherman", "APC_M2A1", "MBT_M60A3_Patton", - "APC_M113" + "APC_M113", + "SAM_Chaparral_M48" ], "artillery_units": [ ], diff --git a/resources/factions/israel_1982.json b/resources/factions/israel_1982.json index b527416a..b975c7b9 100644 --- a/resources/factions/israel_1982.json +++ b/resources/factions/israel_1982.json @@ -22,7 +22,8 @@ "frontline_units": [ "APC_M113", "MBT_M60A3_Patton", - "MBT_Merkava_Mk__4" + "MBT_Merkava_Mk__4", + "AAA_Vulcan_M163" ], "artillery_units": [ ], diff --git a/resources/factions/israel_2000.json b/resources/factions/israel_2000.json index c23c315e..667df3bd 100644 --- a/resources/factions/israel_2000.json +++ b/resources/factions/israel_2000.json @@ -23,7 +23,8 @@ "APC_M113", "APC_M1043_HMMWV_Armament", "ATGM_M1045_HMMWV_TOW", - "MBT_Merkava_Mk__4" + "MBT_Merkava_Mk__4", + "AAA_Vulcan_M163" ], "artillery_units": [ "SPH_M109_Paladin", diff --git a/resources/factions/italy_1990.json b/resources/factions/italy_1990.json index 62ac4ce5..1f0250da 100644 --- a/resources/factions/italy_1990.json +++ b/resources/factions/italy_1990.json @@ -18,7 +18,8 @@ ], "frontline_units": [ "MBT_Leopard_1A3", - "APC_M113" + "APC_M113", + "SAM_Avenger_M1097" ], "artillery_units": [ "SPH_M109_Paladin" diff --git a/resources/factions/italy_1990_mb339.json b/resources/factions/italy_1990_mb339.json index 186926f7..00cc2914 100644 --- a/resources/factions/italy_1990_mb339.json +++ b/resources/factions/italy_1990_mb339.json @@ -19,7 +19,8 @@ ], "frontline_units": [ "MBT_Leopard_1A3", - "APC_M113" + "APC_M113", + "SAM_Avenger_M1097" ], "artillery_units": [ "SPH_M109_Paladin" diff --git a/resources/factions/japan_2005.json b/resources/factions/japan_2005.json index de03dbd8..a2f24933 100644 --- a/resources/factions/japan_2005.json +++ b/resources/factions/japan_2005.json @@ -23,7 +23,8 @@ "IFV_Marder", "TPz_Fuchs", "IFV_LAV_25", - "APC_M1043_HMMWV_Armament" + "APC_M1043_HMMWV_Armament", + "SPAAA_Gepard" ], "artillery_units": [ "SPH_M109_Paladin", diff --git a/resources/factions/libya_2011.json b/resources/factions/libya_2011.json index 8090ea3c..dd758824 100644 --- a/resources/factions/libya_2011.json +++ b/resources/factions/libya_2011.json @@ -20,7 +20,9 @@ "IFV_BMP_1", "ARV_BRDM_2", "MBT_T_72B", - "MBT_T_55" + "MBT_T_55", + "SPAAA_ZSU_23_4_Shilka", + "SAM_SA_8_Osa_9A33" ], "artillery_units": [ "MLRS_BM_21_Grad" diff --git a/resources/factions/netherlands_1990.json b/resources/factions/netherlands_1990.json index 44fc54ed..26462102 100644 --- a/resources/factions/netherlands_1990.json +++ b/resources/factions/netherlands_1990.json @@ -17,7 +17,8 @@ ], "frontline_units": [ "APC_M113", - "MBT_Leopard_1A3" + "MBT_Leopard_1A3", + "SAM_Avenger_M1097" ], "artillery_units": [ ], diff --git a/resources/factions/north_korea_2000.json b/resources/factions/north_korea_2000.json index 769c595d..794852d4 100644 --- a/resources/factions/north_korea_2000.json +++ b/resources/factions/north_korea_2000.json @@ -24,7 +24,9 @@ "IFV_BMP_1", "MBT_T_55", "MBT_T_72B", - "MBT_T_80U" + "MBT_T_80U", + "AAA_ZSU_57_2", + "SAM_SA_9_Strela_1_9P31" ], "artillery_units": [ "MLRS_BM_21_Grad", diff --git a/resources/factions/pakistan_2015.json b/resources/factions/pakistan_2015.json index 43ba4bba..32e1495d 100644 --- a/resources/factions/pakistan_2015.json +++ b/resources/factions/pakistan_2015.json @@ -23,7 +23,8 @@ "MBT_T_55", "ZBD_04A", "APC_BTR_80", - "APC_M113" + "APC_M113", + "HQ_7_Self_Propelled_LN" ], "artillery_units": [ "MLRS_9A52_Smerch", diff --git a/resources/factions/pmc_russian.json b/resources/factions/pmc_russian.json index 844bdb3c..aec2c021 100644 --- a/resources/factions/pmc_russian.json +++ b/resources/factions/pmc_russian.json @@ -13,7 +13,8 @@ "frontline_units": [ "APC_Cobra", "APC_BTR_80", - "ARV_BRDM_2" + "ARV_BRDM_2", + "SAM_SA_13_Strela_10M3_9A35M3" ], "artillery_units": [ "SPH_2S19_Msta" diff --git a/resources/factions/pmc_us.json b/resources/factions/pmc_us.json index e75e193f..0c46beca 100644 --- a/resources/factions/pmc_us.json +++ b/resources/factions/pmc_us.json @@ -11,7 +11,9 @@ ], "frontline_units": [ "APC_M1043_HMMWV_Armament", - "IFV_MCV_80" + "IFV_MCV_80", + "IFV_LAV_25", + "SAM_Avenger_M1097" ], "artillery_units": [ ], diff --git a/resources/factions/pmc_us_with_mb339.json b/resources/factions/pmc_us_with_mb339.json index ef01e093..e4f706e1 100644 --- a/resources/factions/pmc_us_with_mb339.json +++ b/resources/factions/pmc_us_with_mb339.json @@ -12,7 +12,9 @@ ], "frontline_units": [ "APC_M1043_HMMWV_Armament", - "IFV_MCV_80" + "IFV_MCV_80", + "IFV_LAV_25", + "SAM_Avenger_M1097" ], "artillery_units": [ ], diff --git a/resources/factions/russia_1955.json b/resources/factions/russia_1955.json index ca7e1994..d7cfff94 100644 --- a/resources/factions/russia_1955.json +++ b/resources/factions/russia_1955.json @@ -17,7 +17,8 @@ "FDDM_Grad", "APC_MTLB", "MBT_T_55", - "AAA_ZU_23_on_Ural_375" + "AAA_ZU_23_on_Ural_375", + "AAA_8_8cm_Flak_18" ], "artillery_units": [ "MLRS_BM_21_Grad" diff --git a/resources/factions/russia_1965.json b/resources/factions/russia_1965.json index 2de7b41f..9f986f1d 100644 --- a/resources/factions/russia_1965.json +++ b/resources/factions/russia_1965.json @@ -21,7 +21,9 @@ "ARV_BTR_RD", "IFV_BMD_1", "IFV_BMP_1", - "MBT_T_55" + "MBT_T_55", + "AAA_ZU_23_on_Ural_375", + "AAA_ZSU_57_2" ], "artillery_units": [ "MLRS_BM_21_Grad" diff --git a/resources/factions/russia_1970_limited_air.json b/resources/factions/russia_1970_limited_air.json index 8a1b8daa..9043ad72 100644 --- a/resources/factions/russia_1970_limited_air.json +++ b/resources/factions/russia_1970_limited_air.json @@ -14,7 +14,8 @@ "APC_BTR_80", "IFV_BMD_1", "IFV_BMP_1", - "MBT_T_55" + "MBT_T_55", + "AAA_ZSU_57_2" ], "artillery_units": [ "MLRS_BM_21_Grad", diff --git a/resources/factions/russia_1975.json b/resources/factions/russia_1975.json index a9a0884d..7649f5d5 100644 --- a/resources/factions/russia_1975.json +++ b/resources/factions/russia_1975.json @@ -25,7 +25,8 @@ "APC_BTR_80", "IFV_BMD_1", "IFV_BMP_1", - "MBT_T_55" + "MBT_T_55", + "SAM_SA_8_Osa_9A33" ], "artillery_units": [ "MLRS_BM_21_Grad", diff --git a/resources/factions/russia_1990.json b/resources/factions/russia_1990.json index dd9048bd..ef0e75be 100644 --- a/resources/factions/russia_1990.json +++ b/resources/factions/russia_1990.json @@ -29,7 +29,8 @@ "IFV_BMP_1", "IFV_BMP_2", "MBT_T_72B", - "MBT_T_80U" + "MBT_T_80U", + "SAM_SA_13_Strela_10M3_9A35M3" ], "artillery_units": [ "MLRS_9K57_Uragan_BM_27", diff --git a/resources/factions/russia_2010.json b/resources/factions/russia_2010.json index 29414763..3617cdd3 100644 --- a/resources/factions/russia_2010.json +++ b/resources/factions/russia_2010.json @@ -34,7 +34,8 @@ "APC_BTR_82A", "MBT_T_90", "MBT_T_80U", - "MBT_T_72B3" + "MBT_T_72B3", + "SAM_SA_19_Tunguska_2S6" ], "artillery_units": [ "MLRS_9K57_Uragan_BM_27", diff --git a/resources/factions/russia_2020.json b/resources/factions/russia_2020.json index b1c45b8a..91554c82 100644 --- a/resources/factions/russia_2020.json +++ b/resources/factions/russia_2020.json @@ -32,7 +32,8 @@ "IFV_BMP_3", "MBT_T_90", "MBT_T_80U", - "MBT_T_72B" + "MBT_T_72B", + "SAM_SA_19_Tunguska_2S6" ], "artillery_units": [ "MLRS_9K57_Uragan_BM_27", diff --git a/resources/factions/soviet_union_1943.json b/resources/factions/soviet_union_1943.json index e30a34dc..3b0bb9a5 100644 --- a/resources/factions/soviet_union_1943.json +++ b/resources/factions/soviet_union_1943.json @@ -11,7 +11,8 @@ "MT_M4_Sherman", "APC_M2A1", "Daimler_Armoured_Car", - "LT_Mk_VII_Tetrarch" + "LT_Mk_VII_Tetrarch", + "AAA_Bofors_40mm" ], "artillery_units": [ "MLRS_BM_21_Grad" diff --git a/resources/factions/spain_1990.json b/resources/factions/spain_1990.json index 8eb658bf..b736b672 100644 --- a/resources/factions/spain_1990.json +++ b/resources/factions/spain_1990.json @@ -20,7 +20,8 @@ "frontline_units": [ "MBT_M60A3_Patton", "MBT_Leopard_2", - "APC_M113" + "APC_M113", + "SAM_Avenger_M1097" ], "artillery_units": [ ], diff --git a/resources/factions/sweden_1970.json b/resources/factions/sweden_1970.json index 55362275..41a79c1e 100644 --- a/resources/factions/sweden_1970.json +++ b/resources/factions/sweden_1970.json @@ -18,7 +18,8 @@ "frontline_units": [ "IFV_MCV_80", "MBT_Leopard_2", - "APC_M1126_Stryker_ICV" + "APC_M1126_Stryker_ICV", + "SAM_Chaparral_M48" ], "artillery_units": [ ], @@ -32,7 +33,6 @@ "air_defenses": [ "ChaparralGenerator", "EarlyColdWarFlakGenerator", - "AvengerGenerator", "HawkGenerator", "VulcanGenerator" ], diff --git a/resources/factions/sweden_1990.json b/resources/factions/sweden_1990.json index c5d78b6e..e6c20950 100644 --- a/resources/factions/sweden_1990.json +++ b/resources/factions/sweden_1990.json @@ -17,7 +17,8 @@ "frontline_units": [ "IFV_MCV_80", "MBT_Leopard_2", - "APC_M1126_Stryker_ICV" + "APC_M1126_Stryker_ICV", + "SAM_Avenger_M1097" ], "artillery_units": [ ], diff --git a/resources/factions/syria_1948.json b/resources/factions/syria_1948.json index b8814e6e..3ff2e29d 100644 --- a/resources/factions/syria_1948.json +++ b/resources/factions/syria_1948.json @@ -11,7 +11,8 @@ "AC_Sd_Kfz_234_2_Puma", "APC_Sd_Kfz_251", "MT_Pz_Kpfw_IV_Ausf_H", - "MT_M4_Sherman" + "MT_M4_Sherman", + "AAA_Bofors_40mm" ], "artillery_units": [ ], diff --git a/resources/factions/syria_1967.json b/resources/factions/syria_1967.json index d63cc699..b84c590f 100644 --- a/resources/factions/syria_1967.json +++ b/resources/factions/syria_1967.json @@ -19,7 +19,9 @@ "frontline_units": [ "ARV_BRDM_2", "MT_Pz_Kpfw_IV_Ausf_H", - "MBT_T_55" + "MBT_T_55", + "AAA_ZU_23_on_Ural_375", + "AAA_ZSU_57_2" ], "artillery_units": [ "MLRS_BM_21_Grad" diff --git a/resources/factions/syria_1967_with_ww2_weapons.json b/resources/factions/syria_1967_with_ww2_weapons.json index d97cc2da..46b6bb34 100644 --- a/resources/factions/syria_1967_with_ww2_weapons.json +++ b/resources/factions/syria_1967_with_ww2_weapons.json @@ -22,7 +22,8 @@ "MBT_T_55", "MT_Pz_Kpfw_IV_Ausf_H", "StuG_III_Ausf__G", - "TD_Jagdpanzer_IV" + "TD_Jagdpanzer_IV", + "AAA_ZSU_57_2" ], "artillery_units": [ "MLRS_BM_21_Grad" diff --git a/resources/factions/syria_1973.json b/resources/factions/syria_1973.json index 1d1a5c55..83af1f67 100644 --- a/resources/factions/syria_1973.json +++ b/resources/factions/syria_1973.json @@ -19,7 +19,9 @@ "frontline_units": [ "IFV_BMP_1", "APC_MTLB", - "MBT_T_55" + "MBT_T_55", + "AAA_ZU_23_on_Ural_375", + "AAA_ZSU_57_2" ], "artillery_units": [ "MLRS_BM_21_Grad" diff --git a/resources/factions/syria_1982.json b/resources/factions/syria_1982.json index cde94609..ab74b0de 100644 --- a/resources/factions/syria_1982.json +++ b/resources/factions/syria_1982.json @@ -21,7 +21,9 @@ "IFV_BMP_1", "APC_MTLB", "MBT_T_55", - "MBT_T_72B" + "MBT_T_72B", + "AAA_ZU_23_on_Ural_375", + "AAA_ZSU_57_2" ], "artillery_units": [ "MLRS_BM_21_Grad" diff --git a/resources/factions/syria_2011.json b/resources/factions/syria_2011.json index 4153f679..25d94f56 100644 --- a/resources/factions/syria_2011.json +++ b/resources/factions/syria_2011.json @@ -31,7 +31,8 @@ "APC_Cobra", "MBT_T_55", "MBT_T_72B", - "MBT_T_90" + "MBT_T_90", + "AAA_ZSU_57_2" ], "artillery_units": [ "MLRS_9K57_Uragan_BM_27", diff --git a/resources/factions/turkey_2005.json b/resources/factions/turkey_2005.json index 0a11e63a..4aad1c46 100644 --- a/resources/factions/turkey_2005.json +++ b/resources/factions/turkey_2005.json @@ -21,7 +21,8 @@ "MBT_Leopard_1A3", "MBT_M60A3_Patton", "APC_Cobra", - "APC_BTR_80" + "APC_BTR_80", + "SAM_Avenger_M1097" ], "artillery_units": [ "SPH_M109_Paladin" diff --git a/resources/factions/uk_1944.json b/resources/factions/uk_1944.json index c771db2c..418e2d79 100644 --- a/resources/factions/uk_1944.json +++ b/resources/factions/uk_1944.json @@ -22,7 +22,8 @@ "CT_Centaur_IV", "HIT_Churchill_VII", "Daimler_Armoured_Car", - "LT_Mk_VII_Tetrarch" + "LT_Mk_VII_Tetrarch", + "AAA_Bofors_40mm" ], "artillery_units": [ ], diff --git a/resources/factions/uk_1990.json b/resources/factions/uk_1990.json index b3db7880..f79c71ab 100644 --- a/resources/factions/uk_1990.json +++ b/resources/factions/uk_1990.json @@ -21,7 +21,8 @@ "MBT_Challenger_II", "IFV_MCV_80", "APC_M1043_HMMWV_Armament", - "ATGM_M1045_HMMWV_TOW" + "ATGM_M1045_HMMWV_TOW", + "SAM_Avenger_M1097" ], "artillery_units": [ "MLRS_M270", diff --git a/resources/factions/ukraine_2010.json b/resources/factions/ukraine_2010.json index dac93cb8..b92f90c6 100644 --- a/resources/factions/ukraine_2010.json +++ b/resources/factions/ukraine_2010.json @@ -25,7 +25,8 @@ "IFV_BMP_2", "APC_BTR_80", "MBT_T_80U", - "MBT_T_72B" + "MBT_T_72B", + "SAM_SA_13_Strela_10M3_9A35M3" ], "artillery_units": [ ], diff --git a/resources/factions/us_aggressors.json b/resources/factions/us_aggressors.json index eefebd9a..7568ccd5 100644 --- a/resources/factions/us_aggressors.json +++ b/resources/factions/us_aggressors.json @@ -33,7 +33,8 @@ "ATGM_M1134_Stryker", "IFV_M2A2_Bradley", "IFV_LAV_25", - "APC_M1043_HMMWV_Armament" + "APC_M1043_HMMWV_Armament", + "SAM_Avenger_M1097" ], "artillery_units": [ "MLRS_M270", diff --git a/resources/factions/usa_1944.json b/resources/factions/usa_1944.json index f1c78ece..053ace3c 100644 --- a/resources/factions/usa_1944.json +++ b/resources/factions/usa_1944.json @@ -19,7 +19,8 @@ "APC_M2A1", "M30_Cargo_Carrier", "LAC_M8_Greyhound", - "TD_M10_GMC" + "TD_M10_GMC", + "AA_gun_QF_3_7" ], "artillery_units": [ "M12_GMC" diff --git a/resources/factions/usa_1955.json b/resources/factions/usa_1955.json index 482fd683..1c2a1ec8 100644 --- a/resources/factions/usa_1955.json +++ b/resources/factions/usa_1955.json @@ -12,7 +12,8 @@ "frontline_units": [ "MT_M4_Sherman", "MBT_M60A3_Patton", - "APC_M2A1" + "APC_M2A1", + "AAA_Bofors_40mm" ], "artillery_units": [ "M12_GMC" diff --git a/resources/factions/usa_1960.json b/resources/factions/usa_1960.json index 4397748f..e9d7c4c7 100644 --- a/resources/factions/usa_1960.json +++ b/resources/factions/usa_1960.json @@ -12,7 +12,8 @@ ], "frontline_units": [ "MBT_M60A3_Patton", - "APC_M113" + "APC_M113", + "AAA_Vulcan_M163" ], "artillery_units": [ ], diff --git a/resources/factions/usa_1965.json b/resources/factions/usa_1965.json index 2acd421a..e0a03e3f 100644 --- a/resources/factions/usa_1965.json +++ b/resources/factions/usa_1965.json @@ -11,7 +11,8 @@ ], "frontline_units": [ "MBT_M60A3_Patton", - "APC_M113" + "APC_M113", + "AAA_Vulcan_M163" ], "artillery_units": [ "SPH_M109_Paladin" diff --git a/resources/factions/usa_1975.json b/resources/factions/usa_1975.json index a72383d8..cd818384 100644 --- a/resources/factions/usa_1975.json +++ b/resources/factions/usa_1975.json @@ -12,7 +12,9 @@ ], "frontline_units": [ "MBT_M60A3_Patton", - "APC_M113" + "APC_M113", + "SAM_Chaparral_M48", + "AAA_Vulcan_M163" ], "artillery_units": [ "SPH_M109_Paladin" diff --git a/resources/factions/usa_1990.json b/resources/factions/usa_1990.json index dfe64438..58b5ac14 100644 --- a/resources/factions/usa_1990.json +++ b/resources/factions/usa_1990.json @@ -32,7 +32,8 @@ "IFV_M2A2_Bradley", "IFV_LAV_25", "APC_M1043_HMMWV_Armament", - "ATGM_M1045_HMMWV_TOW" + "ATGM_M1045_HMMWV_TOW", + "SAM_Avenger_M1097" ], "artillery_units": [ "MLRS_M270", diff --git a/resources/factions/usa_2005.json b/resources/factions/usa_2005.json index 5ebe5d1c..916c61a8 100644 --- a/resources/factions/usa_2005.json +++ b/resources/factions/usa_2005.json @@ -32,7 +32,9 @@ "IFV_M2A2_Bradley", "IFV_LAV_25", "APC_M1043_HMMWV_Armament", - "ATGM_M1045_HMMWV_TOW" + "ATGM_M1045_HMMWV_TOW", + "SAM_Avenger_M1097", + "SAM_Linebacker_M6" ], "artillery_units": [ "MLRS_M270", diff --git a/resources/factions/usa_2005_c130.json b/resources/factions/usa_2005_c130.json index 356f62c0..60c5c6da 100644 --- a/resources/factions/usa_2005_c130.json +++ b/resources/factions/usa_2005_c130.json @@ -33,7 +33,9 @@ "IFV_M2A2_Bradley", "IFV_LAV_25", "APC_M1043_HMMWV_Armament", - "ATGM_M1045_HMMWV_TOW" + "ATGM_M1045_HMMWV_TOW", + "SAM_Avenger_M1097", + "SAM_Linebacker_M6" ], "artillery_units": [ "MLRS_M270", diff --git a/resources/factions/usa_2005_modded.json b/resources/factions/usa_2005_modded.json index e4839515..2e10263a 100644 --- a/resources/factions/usa_2005_modded.json +++ b/resources/factions/usa_2005_modded.json @@ -33,7 +33,9 @@ "IFV_M2A2_Bradley", "IFV_LAV_25", "APC_M1043_HMMWV_Armament", - "ATGM_M1045_HMMWV_TOW" + "ATGM_M1045_HMMWV_TOW", + "SAM_Avenger_M1097", + "SAM_Linebacker_M6" ], "artillery_units": [ "MLRS_M270", diff --git a/resources/factions/usn_1985.json b/resources/factions/usn_1985.json index 55bc56e5..c21cf03c 100644 --- a/resources/factions/usn_1985.json +++ b/resources/factions/usn_1985.json @@ -20,7 +20,8 @@ "frontline_units": [ "MBT_M60A3_Patton", "APC_M113", - "APC_M1025_HMMWV" + "APC_M1025_HMMWV", + "AAA_Vulcan_M163" ], "artillery_units": [ "SPH_M109_Paladin", diff --git a/resources/syrialandmap.p b/resources/syrialandmap.p index 658394d6..1b5cc168 100644 Binary files a/resources/syrialandmap.p and b/resources/syrialandmap.p differ diff --git a/resources/tools/syria_terrain.miz b/resources/tools/syria_terrain.miz index 9d6cc228..a50e4e92 100644 Binary files a/resources/tools/syria_terrain.miz and b/resources/tools/syria_terrain.miz differ