diff --git a/changelog.md b/changelog.md index 0d8d8f1e..10ce3391 100644 --- a/changelog.md +++ b/changelog.md @@ -15,6 +15,7 @@ * **[Modding]** Updated support for F-4B/C Phantom mod to 2.8.7.204 * **[Modding]** Updated Community A-4E-C mod version support to 2.2.0 release. * **[Modding]** Added F/A-18E/F Super Hornet AI Tanker mod support (Chiller Juice Studios SuperBug Tanker AI version 1.4) +* **[Modding]** Added VSN Super Étendard mod support (v2.5.5) * **[Modding]** Added F9F Panther mod support (version v2.8.7.101) * **[Modding]** Updated Irondome support to IDF Assets Pack V1.1, adding support for the David's Sling * **[Radios]** Added HF-FM band for AN/ARC-222 diff --git a/game/factions/faction.py b/game/factions/faction.py index 0edd38d9..8997ed96 100644 --- a/game/factions/faction.py +++ b/game/factions/faction.py @@ -383,6 +383,8 @@ class Faction: self.remove_aircraft("JAS39Gripen") self.remove_aircraft("JAS39Gripen_BVR") self.remove_aircraft("JAS39Gripen_AG") + if not mod_settings.super_etendard: + self.remove_aircraft("VSN_SEM") if not mod_settings.su30_flanker_h: self.remove_aircraft("Su-30MKA") self.remove_aircraft("Su-30MKI") diff --git a/game/theater/start_generator.py b/game/theater/start_generator.py index 4974398c..94d7b2ea 100644 --- a/game/theater/start_generator.py +++ b/game/theater/start_generator.py @@ -73,6 +73,7 @@ class ModSettings: irondome: bool = False uh_60l: bool = False jas39_gripen: bool = False + super_etendard: bool = False su30_flanker_h: bool = False su57_felon: bool = False frenchpack: bool = False diff --git a/pydcs_extensions/__init__.py b/pydcs_extensions/__init__.py index e3abdf18..73aaaa6c 100644 --- a/pydcs_extensions/__init__.py +++ b/pydcs_extensions/__init__.py @@ -21,6 +21,7 @@ from .irondome import * from .jas39 import * from .ov10a import * from .spanishnavypack import * +from .super_etendard import * from .su30 import * from .su57 import * from .swedishmilitaryassetspack import * diff --git a/pydcs_extensions/super_etendard/__init__.py b/pydcs_extensions/super_etendard/__init__.py new file mode 100644 index 00000000..a4493689 --- /dev/null +++ b/pydcs_extensions/super_etendard/__init__.py @@ -0,0 +1 @@ +from .super_etendard import * diff --git a/pydcs_extensions/super_etendard/super_etendard.py b/pydcs_extensions/super_etendard/super_etendard.py new file mode 100644 index 00000000..4a0a5c5a --- /dev/null +++ b/pydcs_extensions/super_etendard/super_etendard.py @@ -0,0 +1,144 @@ +from dcs import task +from dcs.planes import PlaneType +from dcs.weapons_data import Weapons + + +from game.modsupport import planemod +from pydcs_extensions.weapon_injector import inject_weapons + + +class WeaponsSEM: + Fuel_Tank_1100_Liter = { + "clsid": "{SEM1100_PTB}", + "name": "Fuel Tank 1100 Liter", + "weight": 1150, + } + Fuel_Tank_625_Liter = { + "clsid": "{SEM625_PTB}", + "name": "Fuel Tank 625 Liter", + "weight": 1150, + } + + +inject_weapons(WeaponsSEM) + + +@planemod +class VSN_SEM(PlaneType): + id = "VSN_SEM" + flyable = True + height = 4 + width = 13.05 + length = 18 + fuel_max = 6103 + max_speed = 2649.996 + chaff = 90 + flare = 45 + charge_total = 180 + chaff_charge_size = 1 + flare_charge_size = 2 + category = "Interceptor" # {78EFB7A2-FD52-4b57-A6A6-3BF0E1D6555F} + radio_frequency = 127.5 + + livery_name = "VSN_SEM" # from type + + class Pylon1: + Smokewinder___red = (1, Weapons.Smokewinder___red) + Smokewinder___green = (1, Weapons.Smokewinder___green) + Smokewinder___blue = (1, Weapons.Smokewinder___blue) + Smokewinder___white = (1, Weapons.Smokewinder___white) + Smokewinder___yellow = (1, Weapons.Smokewinder___yellow) + AN_ASQ_T50_TCTS_Pod___ACMI_Pod = (1, Weapons.AN_ASQ_T50_TCTS_Pod___ACMI_Pod) + Mk_81___250lb_GP_Bomb_LD = (1, Weapons.Mk_81___250lb_GP_Bomb_LD) + Mk_82___500lb_GP_Bomb_LD = (1, Weapons.Mk_82___500lb_GP_Bomb_LD) + R550_Magic_2_IR_AAM = (1, Weapons.R550_Magic_2_IR_AAM) + LAU_61_pod___19_x_2_75_Hydra__UnGd_Rkts_M151__HE = ( + 1, + Weapons.LAU_61_pod___19_x_2_75_Hydra__UnGd_Rkts_M151__HE, + ) + ALQ_131___ECM_Pod = (1, Weapons.ALQ_131___ECM_Pod) + AIM_9M_Sidewinder_IR_AAM = (1, Weapons.AIM_9M_Sidewinder_IR_AAM) + AIM_9P_Sidewinder_IR_AAM = (1, Weapons.AIM_9P_Sidewinder_IR_AAM) + + class Pylon2: + AGM_65K___Maverick_K__CCD_Imp_ASM_ = ( + 2, + Weapons.AGM_65K___Maverick_K__CCD_Imp_ASM_, + ) + GBU_12___500lb_Laser_Guided_Bomb = (2, Weapons.GBU_12___500lb_Laser_Guided_Bomb) + LAU_61_pod___19_x_2_75_Hydra__UnGd_Rkts_M151__HE = ( + 2, + Weapons.LAU_61_pod___19_x_2_75_Hydra__UnGd_Rkts_M151__HE, + ) + Mk_81___250lb_GP_Bomb_LD = (2, Weapons.Mk_81___250lb_GP_Bomb_LD) + Mk_82___500lb_GP_Bomb_LD = (2, Weapons.Mk_82___500lb_GP_Bomb_LD) + Fuel_Tank_1100_Liter = (2, WeaponsSEM.Fuel_Tank_1100_Liter) + Fuel_Tank_625_Liter = (2, WeaponsSEM.Fuel_Tank_625_Liter) + + # ERRR + + class Pylon5: + L_081_Fantasmagoria_ELINT_pod = (5, Weapons.L_081_Fantasmagoria_ELINT_pod) + + class Pylon6: + MER2_with_2_x_Mk_82___500lb_GP_Bombs_LD = ( + 6, + Weapons.MER2_with_2_x_Mk_82___500lb_GP_Bombs_LD, + ) + AGM_65K___Maverick_K__CCD_Imp_ASM_ = ( + 6, + Weapons.AGM_65K___Maverick_K__CCD_Imp_ASM_, + ) + + # ERRR + + class Pylon10: + AGM_65K___Maverick_K__CCD_Imp_ASM_ = ( + 10, + Weapons.AGM_65K___Maverick_K__CCD_Imp_ASM_, + ) + GBU_12___500lb_Laser_Guided_Bomb = ( + 10, + Weapons.GBU_12___500lb_Laser_Guided_Bomb, + ) + LAU_61_pod___19_x_2_75_Hydra__UnGd_Rkts_M151__HE = ( + 10, + Weapons.LAU_61_pod___19_x_2_75_Hydra__UnGd_Rkts_M151__HE, + ) + Mk_81___250lb_GP_Bomb_LD = (10, Weapons.Mk_81___250lb_GP_Bomb_LD) + Mk_82___500lb_GP_Bomb_LD = (10, Weapons.Mk_82___500lb_GP_Bomb_LD) + Fuel_Tank_1100_Liter = (10, WeaponsSEM.Fuel_Tank_1100_Liter) + Fuel_Tank_625_Liter = (10, WeaponsSEM.Fuel_Tank_625_Liter) + + class Pylon11: + Smokewinder___red = (11, Weapons.Smokewinder___red) + Smokewinder___green = (11, Weapons.Smokewinder___green) + Smokewinder___blue = (11, Weapons.Smokewinder___blue) + Smokewinder___white = (11, Weapons.Smokewinder___white) + Smokewinder___yellow = (11, Weapons.Smokewinder___yellow) + AN_ASQ_T50_TCTS_Pod___ACMI_Pod = (11, Weapons.AN_ASQ_T50_TCTS_Pod___ACMI_Pod) + Mk_81___250lb_GP_Bomb_LD = (11, Weapons.Mk_81___250lb_GP_Bomb_LD) + Mk_82___500lb_GP_Bomb_LD = (11, Weapons.Mk_82___500lb_GP_Bomb_LD) + R550_Magic_2_IR_AAM = (11, Weapons.R550_Magic_2_IR_AAM) + LAU_61_pod___19_x_2_75_Hydra__UnGd_Rkts_M151__HE = ( + 11, + Weapons.LAU_61_pod___19_x_2_75_Hydra__UnGd_Rkts_M151__HE, + ) + ALQ_131___ECM_Pod = (11, Weapons.ALQ_131___ECM_Pod) + AIM_9M_Sidewinder_IR_AAM = (11, Weapons.AIM_9M_Sidewinder_IR_AAM) + AIM_9P_Sidewinder_IR_AAM = (11, Weapons.AIM_9P_Sidewinder_IR_AAM) + + pylons = {1, 2, 3, 5, 6, 9, 10, 11} + + tasks = [ + task.CAP, + task.Escort, + task.FighterSweep, + task.Intercept, + task.Reconnaissance, + task.GroundAttack, + task.CAS, + task.AFAC, + task.RunwayAttack, + ] + task_default = task.FighterSweep diff --git a/qt_ui/windows/newgame/QNewGameWizard.py b/qt_ui/windows/newgame/QNewGameWizard.py index 1a0b0028..a399897b 100644 --- a/qt_ui/windows/newgame/QNewGameWizard.py +++ b/qt_ui/windows/newgame/QNewGameWizard.py @@ -106,6 +106,7 @@ class NewGameWizard(QtWidgets.QWizard): irondome=self.field("irondome"), uh_60l=self.field("uh_60l"), jas39_gripen=self.field("jas39_gripen"), + super_etendard=self.field("super_etendard"), su30_flanker_h=self.field("su30_flanker_h"), su57_felon=self.field("su57_felon"), ov10a_bronco=self.field("ov10a_bronco"), diff --git a/qt_ui/windows/newgame/WizardPages/QGeneratorSettings.py b/qt_ui/windows/newgame/WizardPages/QGeneratorSettings.py index 363984ef..d92ac4c6 100644 --- a/qt_ui/windows/newgame/WizardPages/QGeneratorSettings.py +++ b/qt_ui/windows/newgame/WizardPages/QGeneratorSettings.py @@ -124,6 +124,8 @@ class GeneratorOptions(QtWidgets.QWizardPage): self.registerField("f105_thunderchief", self.f105_thunderchief) self.jas39_gripen = QtWidgets.QCheckBox() self.registerField("jas39_gripen", self.jas39_gripen) + self.super_etendard = QtWidgets.QCheckBox() + self.registerField("super_etendard", self.super_etendard) self.su30_flanker_h = QtWidgets.QCheckBox() self.registerField("su30_flanker_h", self.su30_flanker_h) self.su57_felon = QtWidgets.QCheckBox() @@ -173,6 +175,7 @@ class GeneratorOptions(QtWidgets.QWizardPage): ("Swedish Military Assets pack (1.10)", self.swedishmilitaryassetspack), ("JAS 39 Gripen (v1.8.5-beta)", self.jas39_gripen), ("OV-10A Bronco", self.ov10a_bronco), + ("Super Étendard (v2.5.5)", self.super_etendard), ("Su-30 Flanker-H (V2.7.3 beta)", self.su30_flanker_h), ("Su-57 Felon (build-04)", self.su57_felon), ("UH-60L Black Hawk (v1.3.1)", self.uh_60l), @@ -232,6 +235,7 @@ class GeneratorOptions(QtWidgets.QWizardPage): self.f104_starfighter.setChecked(s.get("f104_starfighter", False)) self.f105_thunderchief.setChecked(s.get("f105_thunderchief", False)) self.jas39_gripen.setChecked(s.get("jas39_gripen", False)) + self.super_etendard.setChecked(s.get("super_etendard", False)) self.su30_flanker_h.setChecked(s.get("su30_flanker_h", False)) self.su57_felon.setChecked(s.get("su57_felon", False)) self.ov10a_bronco.setChecked(s.get("ov10a_bronco", False)) diff --git a/resources/customized_payloads/VSN_SEM.lua b/resources/customized_payloads/VSN_SEM.lua new file mode 100644 index 00000000..5ce7c43c --- /dev/null +++ b/resources/customized_payloads/VSN_SEM.lua @@ -0,0 +1,146 @@ +local unitPayloads = { + ["name"] = "VSN_SEM", + ["payloads"] = { + [1] = { + ["name"] = "CAS", + ["pylons"] = { + [1] = { + ["CLSID"] = "{FC23864E-3B80-48E3-9C03-4DA8B1D7497B}", + ["num"] = 1, + }, + [2] = { + ["CLSID"] = "{69DC8AE7-8F77-427B-B8AA-B19D3F478B65}", + ["num"] = 2, + }, + [3] = { + ["CLSID"] = "{FC23864E-3B80-48E3-9C03-4DA8B1D7497B}", + ["num"] = 11, + }, + [4] = { + ["CLSID"] = "{69DC8AE7-8F77-427B-B8AA-B19D3F478B65}", + ["num"] = 10, + }, + [5] = { + ["CLSID"] = "{69DC8AE7-8F77-427B-B8AA-B19D3F478B65}", + ["num"] = 6, + }, + }, + ["tasks"] = { + [1] = 32, + [2] = 31, + }, + }, + [2] = { + ["name"] = "CAP", + ["pylons"] = { + [1] = { + ["CLSID"] = "{FC23864E-3B80-48E3-9C03-4DA8B1D7497B}", + ["num"] = 1, + }, + [2] = { + ["CLSID"] = "{SEM1100_PTB}", + ["num"] = 2, + }, + [3] = { + ["CLSID"] = "{FC23864E-3B80-48E3-9C03-4DA8B1D7497B}", + ["num"] = 11, + }, + [4] = { + ["CLSID"] = "{SEM1100_PTB}", + ["num"] = 10, + }, + }, + ["tasks"] = { + [1] = 11, + }, + }, + [3] = { + ["name"] = "ANTISHIP", + ["pylons"] = { + [1] = { + ["CLSID"] = "{FC23864E-3B80-48E3-9C03-4DA8B1D7497B}", + ["num"] = 1, + }, + [2] = { + ["CLSID"] = "{69DC8AE7-8F77-427B-B8AA-B19D3F478B65}", + ["num"] = 2, + }, + [3] = { + ["CLSID"] = "{FC23864E-3B80-48E3-9C03-4DA8B1D7497B}", + ["num"] = 11, + }, + [4] = { + ["CLSID"] = "{69DC8AE7-8F77-427B-B8AA-B19D3F478B65}", + ["num"] = 10, + }, + [5] = { + ["CLSID"] = "{69DC8AE7-8F77-427B-B8AA-B19D3F478B65}", + ["num"] = 6, + }, + }, + ["tasks"] = { + [1] = 30, + }, + }, + [4] = { + ["name"] = "STRIKE", + ["pylons"] = { + [1] = { + ["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}", + ["num"] = 1, + }, + [2] = { + ["CLSID"] = "{SEM1100_PTB}", + ["num"] = 2, + }, + [3] = { + ["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}", + ["num"] = 11, + }, + [4] = { + ["CLSID"] = "{SEM1100_PTB}", + ["num"] = 10, + }, + [5] = { + ["CLSID"] = "{D5D51E24-348C-4702-96AF-97A714E72697}", + ["num"] = 6, + }, + }, + ["tasks"] = { + [1] = 32, + }, + }, + [5] = { + ["name"] = "DEAD", + ["pylons"] = { + [1] = { + ["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}", + ["num"] = 1, + }, + [2] = { + ["CLSID"] = "{69DC8AE7-8F77-427B-B8AA-B19D3F478B65}", + ["num"] = 2, + }, + [3] = { + ["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}", + ["num"] = 11, + }, + [4] = { + ["CLSID"] = "{69DC8AE7-8F77-427B-B8AA-B19D3F478B65}", + ["num"] = 10, + }, + [5] = { + ["CLSID"] = "{69DC8AE7-8F77-427B-B8AA-B19D3F478B65}", + ["num"] = 6, + }, + }, + ["tasks"] = { + [1] = 32, + }, + }, + }, + ["tasks"] = { + }, + ["unitType"] = "VSN_SEM", +} +return unitPayloads diff --git a/resources/factions/france_1985.json b/resources/factions/france_1985.json index 1f951cea..070b8a18 100644 --- a/resources/factions/france_1985.json +++ b/resources/factions/france_1985.json @@ -13,6 +13,7 @@ "Mirage-F1B", "Mirage-F1CE", "Mirage-F1C-200", + "Super Étendard", "SA 342L Gazelle", "SA 342M Gazelle", "SA 342M Gazelle Mistral" diff --git a/resources/factions/france_1995.json b/resources/factions/france_1995.json index 8dc8a5f9..12318dfa 100644 --- a/resources/factions/france_1995.json +++ b/resources/factions/france_1995.json @@ -14,6 +14,7 @@ "Mirage-F1CE", "Mirage-F1C-200", "Mirage-F1CT", + "Super Étendard", "SA 342L Gazelle", "SA 342M Gazelle", "SA 342M Gazelle Mistral" diff --git a/resources/factions/france_2005.json b/resources/factions/france_2005.json index 373cd33b..227f09b2 100644 --- a/resources/factions/france_2005.json +++ b/resources/factions/france_2005.json @@ -14,6 +14,7 @@ "Mirage-F1CE", "Mirage-F1C-200", "Mirage-F1CT", + "Super Étendard", "SA 342L Gazelle", "SA 342M Gazelle", "SA 342M Gazelle Mistral" diff --git a/resources/ui/units/aircrafts/banners/VSN_SEM.jpg b/resources/ui/units/aircrafts/banners/VSN_SEM.jpg new file mode 100644 index 00000000..41162fbd Binary files /dev/null and b/resources/ui/units/aircrafts/banners/VSN_SEM.jpg differ diff --git a/resources/ui/units/aircrafts/icons/VSN_SEM_24.jpg b/resources/ui/units/aircrafts/icons/VSN_SEM_24.jpg new file mode 100644 index 00000000..b5662e34 Binary files /dev/null and b/resources/ui/units/aircrafts/icons/VSN_SEM_24.jpg differ diff --git a/resources/units/aircraft/VSN_SEM.yaml b/resources/units/aircraft/VSN_SEM.yaml new file mode 100644 index 00000000..e61d4f28 --- /dev/null +++ b/resources/units/aircraft/VSN_SEM.yaml @@ -0,0 +1,25 @@ +description: + The Dassault-Breguet Super Étendard is a French carrier-borne strike fighter aircraft + designed for service with the French Navy aircraft carriers. + + The aircraft is an advanced development of the Étendard IVM, which it replaced. + Super Étendards have seen combat in Kosovo, Afghanistan, Libya, Falklands and + in the Iraq-Iran war. +introduced: 1978 +manufacturer: Dassault-Breguet +origin: France +price: 10 +role: Carrier-based Strike Fighter +carrier_capable: true +gunfighter: true +max_range: 200 +variants: + Super Étendard: {} +tasks: + Anti-ship: 150 + BAI: 250 + CAS: 250 + DEAD: 250 + OCA/Aircraft: 250 + OCA/Runway: 230 + Strike: 230