diff --git a/changelog.md b/changelog.md index b30bdd30..22d1ae1b 100644 --- a/changelog.md +++ b/changelog.md @@ -2,20 +2,24 @@ ## Features/Improvements : -* **[Campaign Generator]** Added Syria map support [TODO] -* **[Campaign Generator]** Added 4 campaigns for the Syria map [TODO] -* **[Campaign Generator]** Added 2 smaller scale campaign for Persian Gulf map +* **[Campaign Generator]** Added Syria map +* **[Campaign Generator]** Added 5 campaigns for the Syria map +* **[Campaign Generator]** Added 2 small scale campaign for Persian Gulf map * **[Units/Factions]** Added factions for Syria map : Syria 2011, Arab Armies 1982, 1973, 1968, 1948, Israel 1982, 1973, 1948 * **[Base Menu]** Budget is visible in recruitment menu. (Thanks to Github contributor root0fall) -* **[Misc]** Added error message in mission when state file can not be written. -* **[Units/Factions]** China, Pakistan, UAE will now use the new WingLoong drone instead of MQ-9 reaper +* **[Misc]** Added error message in mission when the state file can not be written +* **[Units/Factions]** China, Pakistan, UAE will now use the new WingLoong drone as JTAC instead of the MQ-9 Reaper +* **[Units/Factions]** Minor changes to Syria 2011 and Turkey 2005 factions ## Fixed issues : -* **[Mission Generator]** Caucasus terrain improvement on exclusions zone (added forests between Vaziani and Beslan to exlusion zones) -* **[Mission Generator]** The first unit of every base defenses group could not be controlled by Combined Arms. -* **[Mission Generator]** Fixed list of flights not refreshing when changing the mission departure (T+). +* **[Mission Generator]** Caucasus terrain improvement on exclusions zone (added forests between Vaziani and Beslan to exclusion zones) +* **[Mission Generator]** The first unit of every base defenses group could not be controlled with Combined Arms. * **[Mission Generator]** Reduced generated helicopter altitude for CAS missions +* **[Mission Generator]** F-16C default CAS payload was asymmetric, fixed. +* **[Mission Generator]** AH-1W couldn't be bought, and added default payloads. +* **[UI/UX]** Fixed Mi-28N missing thumbnail +* **[UI/UX]** Fixed list of flights not refreshing when changing the mission departure (T+). # 2.0.11 diff --git a/game/db.py b/game/db.py index f0f19fe0..9c91cbda 100644 --- a/game/db.py +++ b/game/db.py @@ -472,7 +472,8 @@ UNIT_BY_TASK = { Rafale_A_S, WingLoong_I, MQ_9_Reaper, - RQ_1A_Predator + RQ_1A_Predator, + AH_1W ], Transport: [ IL_76MD, @@ -789,8 +790,8 @@ FACTIONS = { "Arab Armies 1982": Syria_1982, "Arab Armies 1973": Syria_1973, - "Arab Armies 1967 (WW2 Pack)": Syria_1967, - "Arab Armies 1967": Syria_1967_WW2_Weapons, + "Arab Armies 1967 (WW2 Pack)": Syria_1967_WW2_Weapons, + "Arab Armies 1967": Syria_1967, "Arab League 1948": Arab_Armies_1948, "China 2010": China_2010, @@ -957,6 +958,7 @@ PLANE_PAYLOAD_OVERRIDES = { MQ_9_Reaper: COMMON_OVERRIDE, RQ_1A_Predator: COMMON_OVERRIDE, WingLoong_I: COMMON_OVERRIDE, + AH_1W: COMMON_OVERRIDE, AH_64D:{ CAS: "AGM-114K*16" @@ -1066,6 +1068,7 @@ LHA_CAPABLE = [ SA342Mistral ] + """ ---------- END OF CONFIGURATION SECTION """ diff --git a/game/factions/insurgent.py b/game/factions/insurgent.py index 93e0bc32..d94603c6 100644 --- a/game/factions/insurgent.py +++ b/game/factions/insurgent.py @@ -12,11 +12,13 @@ Insurgent = { AirDefence.AAA_ZU_23_Insurgent_on_Ural_375, Armor.APC_Cobra, + Armor.APC_MTLB, + Armor.ARV_BRDM_2, Unarmed.Transport_Ural_375, Unarmed.Transport_UAZ_469, - Infantry.Soldier_AK, Infantry.Infantry_Soldier_Insurgents, + Infantry.Soldier_RPG, Bulk_cargo_ship_Yakushev, Dry_cargo_ship_Ivanov, diff --git a/game/factions/syria.py b/game/factions/syria.py index bf403a73..b14df3db 100644 --- a/game/factions/syria.py +++ b/game/factions/syria.py @@ -9,6 +9,7 @@ Syria_2011 = { MiG_29S, MiG_25PD, + L_39ZA, Su_24M, Su_17M4, Mi_24V, diff --git a/game/factions/turkey_2005.py b/game/factions/turkey_2005.py index 9a0504bf..02b0500d 100644 --- a/game/factions/turkey_2005.py +++ b/game/factions/turkey_2005.py @@ -16,7 +16,6 @@ Turkey_2005 = { E_3A, UH_1H, - OH_58D, AH_1W, Armor.MBT_Leopard_2, diff --git a/qt_ui/uiconstants.py b/qt_ui/uiconstants.py index 81bfd25b..c0d52631 100644 --- a/qt_ui/uiconstants.py +++ b/qt_ui/uiconstants.py @@ -71,7 +71,7 @@ COLORS: Dict[str, QColor] = { } -CP_SIZE = 24 +CP_SIZE = 12 AIRCRAFT_ICONS: Dict[str, QPixmap] = {} VEHICLES_ICONS: Dict[str, QPixmap] = {} diff --git a/qt_ui/windows/newgame/QCampaignList.py b/qt_ui/windows/newgame/QCampaignList.py index 907898fa..06c42d9f 100644 --- a/qt_ui/windows/newgame/QCampaignList.py +++ b/qt_ui/windows/newgame/QCampaignList.py @@ -19,10 +19,10 @@ CAMPAIGNS = [ ("Persian Gulf - Full Map", persiangulf.PersianGulfTheater, "Terrain_Persian_Gulf"), ("Syria - Golan heights battle", syria.GolanHeights, "Terrain_Syria"), - ("Syria - Invasion from Turkey", persiangulf.PersianGulfTheater, "Terrain_Syria"), - ("Syria - Syrian Civil War", persiangulf.PersianGulfTheater, "Terrain_Syria"), - ("Syria - War on Insurgents", persiangulf.PersianGulfTheater, "Terrain_Syria"), - ("Syria - Full Map", persiangulf.PersianGulfTheater, "Terrain_Syria"), + ("Syria - Invasion from Turkey", syria.TurkishInvasion, "Terrain_Syria"), + ("Syria - Syrian Civil War", syria.SyrianCivilWar, "Terrain_Syria"), + ("Syria - Inherent Resolve", syria.InherentResolve, "Terrain_Syria"), + ("Syria - Full Map", syria.SyriaFullMap, "Terrain_Syria"), ("Normandy - Normandy", normandy.NormandyTheater, "Terrain_Normandy"), ("Normandy - Normandy Small", normandy.NormandySmall, "Terrain_Normandy"), diff --git a/theater/syria.py b/theater/syria.py index 349d73d0..6a8e9f7b 100644 --- a/theater/syria.py +++ b/theater/syria.py @@ -1,10 +1,10 @@ -from dcs.terrain import normandy, syria +from dcs.terrain import syria from .conflicttheater import * from .landmap import * -class GolanHeights(ConflictTheater): +class SyriaTheater(ConflictTheater): terrain = dcs.terrain.Syria() overview_image = "syria.gif" reference_points = {(syria.Eyn_Shemer.position.x, syria.Eyn_Shemer.position.y): (1300, 1380), @@ -17,6 +17,12 @@ class GolanHeights(ConflictTheater): "night": (0, 5), } + def __init__(self): + super(SyriaTheater, self).__init__() + + +class GolanHeights(SyriaTheater): + def __init__(self): super(GolanHeights, self).__init__() @@ -52,3 +58,164 @@ class GolanHeights(ConflictTheater): self.aldumayr.captured_invert = True self.carrier.captured_invert = True self.lha.captured_invert = True + + +class TurkishInvasion(SyriaTheater): + + def __init__(self): + super(TurkishInvasion, self).__init__() + + self.hatay = ControlPoint.from_airport(syria.Hatay, LAND, SIZE_REGULAR, IMPORTANCE_HIGH) + self.incirlik = ControlPoint.from_airport(syria.Incirlik, LAND, SIZE_REGULAR, IMPORTANCE_HIGH) + self.minakh = ControlPoint.from_airport(syria.Minakh, LAND, SIZE_REGULAR, IMPORTANCE_LOW) + self.aleppo = ControlPoint.from_airport(syria.Aleppo, LAND, SIZE_REGULAR, IMPORTANCE_MEDIUM) + self.kuweires = ControlPoint.from_airport(syria.Kuweires, LAND, SIZE_REGULAR, IMPORTANCE_LOW) + self.jirah = ControlPoint.from_airport(syria.Jirah, LAND, SIZE_REGULAR, IMPORTANCE_LOW) + self.tabqa = ControlPoint.from_airport(syria.Tabqa, LAND, SIZE_REGULAR, IMPORTANCE_LOW) + + self.carrier = ControlPoint.carrier("Carrier", Point(133000, -54000), 1001) + self.lha = ControlPoint.lha("LHA", Point(155000, -19000), 1002) + + self.add_controlpoint(self.incirlik, connected_to=[]) + self.add_controlpoint(self.hatay, connected_to=[self.minakh]) + self.add_controlpoint(self.minakh, connected_to=[self.aleppo, self.hatay]) + self.add_controlpoint(self.aleppo, connected_to=[self.kuweires, self.minakh]) + self.add_controlpoint(self.kuweires, connected_to=[self.jirah, self.aleppo]) + self.add_controlpoint(self.jirah, connected_to=[self.tabqa, self.kuweires]) + self.add_controlpoint(self.tabqa, connected_to=[self.jirah]) + + self.add_controlpoint(self.carrier) + self.add_controlpoint(self.lha) + + self.incirlik.captured = True + self.hatay.captured = True + self.carrier.captured = True + self.lha.captured = True + + self.tabqa.captured_invert = True + + +class SyrianCivilWar(SyriaTheater): + + def __init__(self): + super(SyrianCivilWar, self).__init__() + + self.basselAlAssad = ControlPoint.from_airport(syria.Bassel_Al_Assad, LAND, SIZE_REGULAR, IMPORTANCE_HIGH) + self.marjruhayyil = ControlPoint.from_airport(syria.Marj_Ruhayyil, LAND, SIZE_REGULAR, IMPORTANCE_LOW) + self.aldumayr = ControlPoint.from_airport(syria.Al_Dumayr, LAND, SIZE_REGULAR, IMPORTANCE_MEDIUM) + self.hama = ControlPoint.from_airport(syria.Hama, LAND, SIZE_REGULAR, IMPORTANCE_LOW) + self.alqusair= ControlPoint.from_airport(syria.Al_Qusayr, LAND, SIZE_REGULAR, IMPORTANCE_LOW) + self.aleppo = ControlPoint.from_airport(syria.Aleppo, LAND, SIZE_REGULAR, IMPORTANCE_MEDIUM) + + self.palmyra = ControlPoint.from_airport(syria.Palmyra, LAND, SIZE_REGULAR, IMPORTANCE_LOW) + + self.carrier = ControlPoint.carrier("Carrier", Point(18537, -52000), 1001) + self.lha = ControlPoint.lha("LHA", Point(116000, 30000), 1002) + + self.add_controlpoint(self.basselAlAssad, connected_to=[self.hama]) + self.add_controlpoint(self.marjruhayyil, connected_to=[self.aldumayr]) + + self.add_controlpoint(self.hama, connected_to=[self.basselAlAssad, self.aleppo, self.alqusair]) + self.add_controlpoint(self.aleppo, connected_to=[self.hama]) + self.add_controlpoint(self.alqusair, connected_to=[self.hama, self.aldumayr, self.palmyra]) + self.add_controlpoint(self.palmyra, connected_to=[self.alqusair]) + self.add_controlpoint(self.aldumayr, connected_to=[self.alqusair, self.marjruhayyil]) + + self.add_controlpoint(self.carrier) + self.add_controlpoint(self.lha) + + self.basselAlAssad.captured = True + self.marjruhayyil.captured = True + self.carrier.captured = True + self.lha.captured = True + + self.aleppo.captured_invert = True + self.carrier.captured_invert = True + self.lha.captured_invert = True + + +class InherentResolve(SyriaTheater): + + def __init__(self): + super(InherentResolve, self).__init__() + + self.kinghussein = ControlPoint.from_airport(syria.King_Hussein_Air_College, LAND, SIZE_REGULAR, IMPORTANCE_HIGH) + self.khalkhala = ControlPoint.from_airport(syria.Khalkhalah, LAND, SIZE_REGULAR, IMPORTANCE_MEDIUM) + self.palmyra = ControlPoint.from_airport(syria.Palmyra, LAND, SIZE_REGULAR, IMPORTANCE_LOW) + self.jirah = ControlPoint.from_airport(syria.Jirah, LAND, SIZE_REGULAR, IMPORTANCE_LOW) + self.tabqa = ControlPoint.from_airport(syria.Tabqa, LAND, SIZE_REGULAR, IMPORTANCE_LOW) + + self.carrier = ControlPoint.carrier("Carrier", Point(-210000, -200000), 1001) + self.lha = ControlPoint.lha("LHA", Point(-131000, -161000), 1002) + + self.add_controlpoint(self.kinghussein, connected_to=[self.khalkhala]) + self.add_controlpoint(self.khalkhala, connected_to=[self.kinghussein, self.palmyra]) + self.add_controlpoint(self.palmyra, connected_to=[self.khalkhala, self.tabqa]) + self.add_controlpoint(self.tabqa, connected_to=[self.palmyra, self.jirah]) + self.add_controlpoint(self.jirah, connected_to=[self.tabqa]) + + self.add_controlpoint(self.carrier) + self.add_controlpoint(self.lha) + + self.kinghussein.captured = True + self.carrier.captured = True + self.lha.captured = True + + self.jirah.captured_invert = True + self.carrier.captured_invert = True + self.lha.captured_invert = True + + +class SyriaFullMap(SyriaTheater): + + def __init__(self): + super(SyriaFullMap, self).__init__() + + self.ramatDavid = ControlPoint.from_airport(syria.Ramat_David, LAND, SIZE_REGULAR, IMPORTANCE_HIGH) + self.kinghussein = ControlPoint.from_airport(syria.King_Hussein_Air_College, LAND, SIZE_REGULAR, IMPORTANCE_HIGH) + self.khalkhala = ControlPoint.from_airport(syria.Khalkhalah, LAND, SIZE_REGULAR, IMPORTANCE_MEDIUM) + self.palmyra = ControlPoint.from_airport(syria.Palmyra, LAND, SIZE_REGULAR, IMPORTANCE_LOW) + self.jirah = ControlPoint.from_airport(syria.Jirah, LAND, SIZE_REGULAR, IMPORTANCE_LOW) + self.tabqa = ControlPoint.from_airport(syria.Tabqa, LAND, SIZE_REGULAR, IMPORTANCE_LOW) + self.aldumayr = ControlPoint.from_airport(syria.Al_Dumayr, LAND, SIZE_REGULAR, IMPORTANCE_MEDIUM) + self.hama = ControlPoint.from_airport(syria.Hama, LAND, SIZE_REGULAR, IMPORTANCE_LOW) + self.alqusair= ControlPoint.from_airport(syria.Al_Qusayr, LAND, SIZE_REGULAR, IMPORTANCE_LOW) + self.aleppo = ControlPoint.from_airport(syria.Aleppo, LAND, SIZE_REGULAR, IMPORTANCE_MEDIUM) + self.basselAlAssad = ControlPoint.from_airport(syria.Bassel_Al_Assad, LAND, SIZE_REGULAR, IMPORTANCE_HIGH) + self.renemouawad = ControlPoint.from_airport(syria.Rene_Mouawad, LAND, SIZE_REGULAR, IMPORTANCE_HIGH) + self.minakh = ControlPoint.from_airport(syria.Minakh, LAND, SIZE_REGULAR, IMPORTANCE_LOW) + self.hatay = ControlPoint.from_airport(syria.Hatay, LAND, SIZE_REGULAR, IMPORTANCE_HIGH) + self.incirlik = ControlPoint.from_airport(syria.Incirlik, LAND, SIZE_REGULAR, IMPORTANCE_HIGH) + + + self.carrier = ControlPoint.carrier("Carrier", Point(-151000, -106000), 1001) + self.lha = ControlPoint.lha("LHA", Point(-131000, -161000), 1002) + + self.add_controlpoint(self.ramatDavid, connected_to=[self.kinghussein]) + self.add_controlpoint(self.kinghussein, connected_to=[self.khalkhala, self.ramatDavid]) + self.add_controlpoint(self.khalkhala, connected_to=[self.kinghussein, self.aldumayr]) + self.add_controlpoint(self.aldumayr, connected_to=[self.khalkhala, self.alqusair]) + self.add_controlpoint(self.alqusair, connected_to=[self.hama, self.aldumayr, self.palmyra, self.renemouawad]) + self.add_controlpoint(self.renemouawad, connected_to=[self.alqusair, self.basselAlAssad]) + self.add_controlpoint(self.hama, connected_to=[self.aleppo, self.alqusair, self.basselAlAssad]) + self.add_controlpoint(self.basselAlAssad, connected_to=[self.hama, self.hatay, self.renemouawad]) + self.add_controlpoint(self.palmyra, connected_to=[self.tabqa, self.alqusair]) + self.add_controlpoint(self.tabqa, connected_to=[self.palmyra, self.jirah]) + self.add_controlpoint(self.jirah, connected_to=[self.tabqa, self.aleppo]) + self.add_controlpoint(self.aleppo, connected_to=[self.hama, self.jirah, self.minakh]) + self.add_controlpoint(self.minakh, connected_to=[self.hatay, self.aleppo, self.incirlik]) + self.add_controlpoint(self.hatay, connected_to=[self.minakh, self.basselAlAssad]) + self.add_controlpoint(self.incirlik, connected_to=[self.minakh]) + + self.add_controlpoint(self.carrier) + self.add_controlpoint(self.lha) + + self.ramatDavid.captured = True + self.carrier.captured = True + self.lha.captured = True + + self.hatay.captured_invert = True + self.carrier.captured_invert = True + self.lha.captured_invert = True + +