diff --git a/changelog.md b/changelog.md index d482563e..615994c4 100644 --- a/changelog.md +++ b/changelog.md @@ -5,6 +5,7 @@ * **[Mission Generation]** Variable flight-size (2/3/4-ship) for BAI/ANTISHIP/DEAD/STRIKE (main) missions * **[Modding]** Support for F-15D 'Baz' mod version 1.0 * **[Modding]** Support for Su-30 mod version 2.01B +* **[Modding]** Support for F-4B Phantom II mod version v2.7.10.02, patch 2022.10.02 * **[Modding]** Support for F-100 Super Sabre mod versions v2.7.18.01 & 2.7.18.30765 and patches 30.09.22 & 09.10.22 * **[Modding]** Support for F-105 mod version 2.7.12.23x * **[UI]** Add livery selector to Air Wing Configurator's squadrons. diff --git a/game/ato/ai_flight_planner_db.py b/game/ato/ai_flight_planner_db.py index 9b681f39..6f0cdd5f 100644 --- a/game/ato/ai_flight_planner_db.py +++ b/game/ato/ai_flight_planner_db.py @@ -126,6 +126,7 @@ from pydcs_extensions.f104.f104 import VSN_F104G, VSN_F104S, VSN_F104S_AG from pydcs_extensions.f105.f105 import VSN_F105D, VSN_F105G from pydcs_extensions.f15d.f15d import F_15D from pydcs_extensions.f22a.f22a import F_22A +from pydcs_extensions.f4b.f4b import VSN_F4B from pydcs_extensions.hercules.hercules import Hercules from pydcs_extensions.jas39.jas39 import JAS39Gripen, JAS39Gripen_AG from pydcs_extensions.su30.su30 import Su_30MKA, Su_30MKI, Su_30MKM, Su_30SM @@ -162,6 +163,7 @@ CAP_CAPABLE = [ JAS39Gripen, F_16A, F_4E, + VSN_F4B, MiG_31, MiG_25PD, MiG_29G, @@ -233,6 +235,7 @@ CAS_CAPABLE = [ Su_17M4, Su_33, F_4E, + VSN_F4B, S_3B, Su_30, Su_30MKA, @@ -395,6 +398,7 @@ STRIKE_CAPABLE = [ MiG_29G, MiG_29A, F_4E, + VSN_F4B, A_10C_2, A_10C, S_3B, @@ -505,6 +509,7 @@ RUNWAY_ATTACK_CAPABLE = [ MiG_29G, MiG_29A, F_4E, + VSN_F4B, A_10C_2, A_10C, S_3B, diff --git a/game/factions/faction.py b/game/factions/faction.py index c22e562f..ca861de6 100644 --- a/game/factions/faction.py +++ b/game/factions/faction.py @@ -303,6 +303,8 @@ class Faction: if not mod_settings.uh_60l: self.remove_aircraft("UH-60L") self.remove_aircraft("KC130J") + if not mod_settings.f4b_phantom: + self.remove_aircraft("VSN_F4B") if not mod_settings.f15d_baz: self.remove_aircraft("F-15D") if not mod_settings.f22_raptor: diff --git a/game/theater/start_generator.py b/game/theater/start_generator.py index 667c7752..e083d7f5 100644 --- a/game/theater/start_generator.py +++ b/game/theater/start_generator.py @@ -52,6 +52,7 @@ class GeneratorSettings: @dataclass class ModSettings: a4_skyhawk: bool = False + f4b_phantom: bool = False f15d_baz: bool = False f22_raptor: bool = False f100_supersabre: bool = False diff --git a/pydcs_extensions/f4b/f4b.py b/pydcs_extensions/f4b/f4b.py new file mode 100644 index 00000000..a6b1e9ed --- /dev/null +++ b/pydcs_extensions/f4b/f4b.py @@ -0,0 +1,419 @@ +from enum import Enum +from typing import Dict, Any + +from dcs import task +from dcs.planes import PlaneType +from dcs.weapons_data import Weapons +from dcs.liveries_scanner import Liveries + +from game.modsupport import planemod +from pydcs_extensions.weapon_injector import inject_weapons + + +class WeaponsF4B: + F4B_SUU_23_Gun_Pod = { + "clsid": "{VSN_F4B_Gunpod}", + "name": "F4B SUU-23 Gun Pod", + "weight": 112.35, + } + VSN_F4EC_PTB = { + "clsid": "VSN_F4EC_PTB", + "name": "Fuel tank 600 Gal", + "weight": 1980, + } + VSN_F4EL_PTB = { + "clsid": "VSN_F4EL_PTB", + "name": "Fuel tank 370 Gal", + "weight": 1240, + } + VSN_F4ER_PTB = { + "clsid": "VSN_F4ER_PTB", + "name": "Fuel tank 370 Gal", + "weight": 1240, + } + LAU_105_2_AIM_9J = { + "clsid": "{VSN_F4B_LAU105_AIM9J}", + "name": "LAU-105 2*AIM-9J", + "weight": 332, + } + LAU_105_2_AIM_9JULI = { + "clsid": "{VSN_F4B_LAU105_AIM9JULI}", + "name": "LAU-105 2*AIM-9JULI", + "weight": 332, + } + + +inject_weapons(WeaponsF4B) + + +@planemod +class VSN_F4B(PlaneType): + id = "VSN_F4B" + flyable = True + height = 5.02 + width = 11.71 + length = 19.2 + fuel_max = 6416 + max_speed = 2545.2 + chaff = 48 + flare = 48 + charge_total = 96 + chaff_charge_size = 1 + flare_charge_size = 1 + category = "Interceptor" # {78EFB7A2-FD52-4b57-A6A6-3BF0E1D6555F} + radio_frequency = 127.5 + + livery_name = "VSN_F4B" # from type + Liveries = Liveries()[livery_name] + + class Pylon1: + Smoke_Generator___red_ = (1, Weapons.Smoke_Generator___red_) + Smoke_Generator___green_ = (1, Weapons.Smoke_Generator___green_) + Smoke_Generator___blue_ = (1, Weapons.Smoke_Generator___blue_) + Smoke_Generator___white_ = (1, Weapons.Smoke_Generator___white_) + Smoke_Generator___yellow_ = (1, Weapons.Smoke_Generator___yellow_) + Smoke_Generator___orange_ = (1, Weapons.Smoke_Generator___orange_) + + class Pylon2: + GBU_10___2000lb_Laser_Guided_Bomb = ( + 2, + Weapons.GBU_10___2000lb_Laser_Guided_Bomb, + ) + GBU_12___500lb_Laser_Guided_Bomb = (2, Weapons.GBU_12___500lb_Laser_Guided_Bomb) + BRU_42_with_3_x_Mk_20_Rockeye___490lbs_CBUs__247_x_HEAT_Bomblets = ( + 2, + Weapons.BRU_42_with_3_x_Mk_20_Rockeye___490lbs_CBUs__247_x_HEAT_Bomblets, + ) + Mk_84___2000lb_GP_Bomb_LD = (2, Weapons.Mk_84___2000lb_GP_Bomb_LD) + LAU_10_pod___4_x_127mm_ZUNI__UnGd_Rkts_Mk71__HE_FRAG = ( + 2, + Weapons.LAU_10_pod___4_x_127mm_ZUNI__UnGd_Rkts_Mk71__HE_FRAG, + ) + 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, + ) + _3_x_LAU_61_pods___57_x_2_75_Hydra__UnGd_Rkts_M151__HE = ( + 2, + Weapons._3_x_LAU_61_pods___57_x_2_75_Hydra__UnGd_Rkts_M151__HE, + ) + LAU_61_pod___19_x_2_75_Hydra__UnGd_Rkts_M156__Wht_Phos = ( + 2, + Weapons.LAU_61_pod___19_x_2_75_Hydra__UnGd_Rkts_M156__Wht_Phos, + ) + LAU_118a_with_AGM_45B_Shrike_ARM__Imp_ = ( + 2, + Weapons.LAU_118a_with_AGM_45B_Shrike_ARM__Imp_, + ) + Smokewinder___red = (2, Weapons.Smokewinder___red) + Smokewinder___green = (2, Weapons.Smokewinder___green) + Smokewinder___blue = (2, Weapons.Smokewinder___blue) + Smokewinder___white = (2, Weapons.Smokewinder___white) + Smokewinder___yellow = (2, Weapons.Smokewinder___yellow) + BRU_33_with_2_x_LAU_10_pod___4_x_127mm_ZUNI__UnGd_Rkts_Mk71__HE_FRAG = ( + 2, + Weapons.BRU_33_with_2_x_LAU_10_pod___4_x_127mm_ZUNI__UnGd_Rkts_Mk71__HE_FRAG, + ) + BRU_33_with_2_x_LAU_61_pod___19_x_2_75_Hydra__UnGd_Rkts_M151__HE = ( + 2, + Weapons.BRU_33_with_2_x_LAU_61_pod___19_x_2_75_Hydra__UnGd_Rkts_M151__HE, + ) + BRU_41A_with_6_x_Mk_82___500lb_GP_Bomb_LD = ( + 2, + Weapons.BRU_41A_with_6_x_Mk_82___500lb_GP_Bomb_LD, + ) + BRU_33_with_2_x_GBU_12___500lb_Laser_Guided_Bomb = ( + 2, + Weapons.BRU_33_with_2_x_GBU_12___500lb_Laser_Guided_Bomb, + ) + VSN_F4EL_PTB = (2, WeaponsF4B.VSN_F4EL_PTB) + + class Pylon3: + GBU_10___2000lb_Laser_Guided_Bomb = ( + 3, + Weapons.GBU_10___2000lb_Laser_Guided_Bomb, + ) + GBU_12___500lb_Laser_Guided_Bomb = (3, Weapons.GBU_12___500lb_Laser_Guided_Bomb) + BRU_42_with_3_x_Mk_20_Rockeye___490lbs_CBUs__247_x_HEAT_Bomblets = ( + 3, + Weapons.BRU_42_with_3_x_Mk_20_Rockeye___490lbs_CBUs__247_x_HEAT_Bomblets, + ) + BRU_42_with_3_x_Mk_82___500lb_GP_Bombs_LD = ( + 3, + Weapons.BRU_42_with_3_x_Mk_82___500lb_GP_Bombs_LD, + ) + Mk_84___2000lb_GP_Bomb_LD = (3, Weapons.Mk_84___2000lb_GP_Bomb_LD) + LAU_88_with_2_x_AGM_65K___Maverick_K__CCD_Imp_ASM_ = ( + 3, + Weapons.LAU_88_with_2_x_AGM_65K___Maverick_K__CCD_Imp_ASM_, + ) + LAU_88_with_2_x_AGM_65D___Maverick_D__IIR_ASM_ = ( + 3, + Weapons.LAU_88_with_2_x_AGM_65D___Maverick_D__IIR_ASM_, + ) + LAU_118a_with_AGM_45B_Shrike_ARM__Imp_ = ( + 3, + Weapons.LAU_118a_with_AGM_45B_Shrike_ARM__Imp_, + ) + LAU_10_pod___4_x_127mm_ZUNI__UnGd_Rkts_Mk71__HE_FRAG = ( + 3, + Weapons.LAU_10_pod___4_x_127mm_ZUNI__UnGd_Rkts_Mk71__HE_FRAG, + ) + _3_x_LAU_61_pods___57_x_2_75_Hydra__UnGd_Rkts_M151__HE = ( + 3, + Weapons._3_x_LAU_61_pods___57_x_2_75_Hydra__UnGd_Rkts_M151__HE, + ) + BRU_33_with_2_x_LAU_10_pod___4_x_127mm_ZUNI__UnGd_Rkts_Mk71__HE_FRAG = ( + 3, + Weapons.BRU_33_with_2_x_LAU_10_pod___4_x_127mm_ZUNI__UnGd_Rkts_Mk71__HE_FRAG, + ) + BRU_33_with_2_x_LAU_61_pod___19_x_2_75_Hydra__UnGd_Rkts_M151__HE = ( + 3, + Weapons.BRU_33_with_2_x_LAU_61_pod___19_x_2_75_Hydra__UnGd_Rkts_M151__HE, + ) + LAU_88_with_2_x_AGM_65D___Maverick_D__IIR_ASM_ = ( + 3, + Weapons.LAU_88_with_2_x_AGM_65D___Maverick_D__IIR_ASM_, + ) + LAU_88_with_3_x_AGM_65D___Maverick_D__IIR_ASM_ = ( + 3, + Weapons.LAU_88_with_3_x_AGM_65D___Maverick_D__IIR_ASM_, + ) + LAU_105_with_2_x_AIM_9M_Sidewinder_IR_AAM = ( + 3, + Weapons.LAU_105_with_2_x_AIM_9M_Sidewinder_IR_AAM, + ) + LAU_105_2_AIM_9L = (3, Weapons.LAU_105_2_AIM_9L) + LAU_105_with_2_x_AIM_9P_Sidewinder_IR_AAM = ( + 3, + Weapons.LAU_105_with_2_x_AIM_9P_Sidewinder_IR_AAM, + ) + LAU_105_2_AIM_9P5 = (3, Weapons.LAU_105_2_AIM_9P5) + LAU_7_with_2_x_AIM_9B_Sidewinder_IR_AAM = ( + 3, + Weapons.LAU_7_with_2_x_AIM_9B_Sidewinder_IR_AAM, + ) + LAU_105_2_AIM_9J = (3, WeaponsF4B.LAU_105_2_AIM_9J) + LAU_105_2_AIM_9JULI = (3, WeaponsF4B.LAU_105_2_AIM_9JULI) + AIM_120B_AMRAAM___Active_Rdr_AAM = (3, Weapons.AIM_120B_AMRAAM___Active_Rdr_AAM) + AIM_7F_Sparrow_Semi_Active_Radar = (3, Weapons.AIM_7F_Sparrow_Semi_Active_Radar) + AIM_7E_Sparrow_Semi_Active_Radar = (3, Weapons.AIM_7E_Sparrow_Semi_Active_Radar) + Mk_20_Rockeye___490lbs_CBU__247_x_HEAT_Bomblets = ( + 3, + Weapons.Mk_20_Rockeye___490lbs_CBU__247_x_HEAT_Bomblets, + ) + Mk_82___500lb_GP_Bomb_LD = (3, Weapons.Mk_82___500lb_GP_Bomb_LD) + TER_9A_with_3_x_Mk_82_Snakeye___500lb_GP_Bomb_HD = ( + 3, + Weapons.TER_9A_with_3_x_Mk_82_Snakeye___500lb_GP_Bomb_HD, + ) + BRU_33_with_2_x_Mk_83___1000lb_GP_Bomb_LD = ( + 3, + Weapons.BRU_33_with_2_x_Mk_83___1000lb_GP_Bomb_LD, + ) + + class Pylon4: + AIM_7M_Sparrow_Semi_Active_Radar = (4, Weapons.AIM_7M_Sparrow_Semi_Active_Radar) + AIM_7F_Sparrow_Semi_Active_Radar = (4, Weapons.AIM_7F_Sparrow_Semi_Active_Radar) + AIM_7E_Sparrow_Semi_Active_Radar = (4, Weapons.AIM_7E_Sparrow_Semi_Active_Radar) + AIM_120B_AMRAAM___Active_Rdr_AAM = (4, Weapons.AIM_120B_AMRAAM___Active_Rdr_AAM) + + class Pylon5: + AIM_7M_Sparrow_Semi_Active_Radar = (5, Weapons.AIM_7M_Sparrow_Semi_Active_Radar) + AIM_7F_Sparrow_Semi_Active_Radar = (5, Weapons.AIM_7F_Sparrow_Semi_Active_Radar) + AIM_7E_Sparrow_Semi_Active_Radar = (5, Weapons.AIM_7E_Sparrow_Semi_Active_Radar) + AIM_120B_AMRAAM___Active_Rdr_AAM = (5, Weapons.AIM_120B_AMRAAM___Active_Rdr_AAM) + + class Pylon6: + Smokewinder___red = (6, Weapons.Smokewinder___red) + Smokewinder___green = (6, Weapons.Smokewinder___green) + Smokewinder___blue = (6, Weapons.Smokewinder___blue) + Smokewinder___white = (6, Weapons.Smokewinder___white) + Smokewinder___yellow = (6, Weapons.Smokewinder___yellow) + BRU_41A_with_6_x_Mk_82___500lb_GP_Bomb_LD = ( + 6, + Weapons.BRU_41A_with_6_x_Mk_82___500lb_GP_Bomb_LD, + ) + _3_x_LAU_61_pods___57_x_2_75_Hydra__UnGd_Rkts_M151__HE = ( + 6, + Weapons._3_x_LAU_61_pods___57_x_2_75_Hydra__UnGd_Rkts_M151__HE, + ) + BRU_42_with_3_x_Mk_82___500lb_GP_Bombs_LD = ( + 6, + Weapons.BRU_42_with_3_x_Mk_82___500lb_GP_Bombs_LD, + ) + ALQ_131___ECM_Pod = (6, Weapons.ALQ_131___ECM_Pod) + F4B_SUU_23_Gun_Pod = (6, WeaponsF4B.F4B_SUU_23_Gun_Pod) + VSN_F4EC_PTB = (6, WeaponsF4B.VSN_F4EC_PTB) + + class Pylon7: + AIM_7M_Sparrow_Semi_Active_Radar = (7, Weapons.AIM_7M_Sparrow_Semi_Active_Radar) + AIM_7F_Sparrow_Semi_Active_Radar = (7, Weapons.AIM_7F_Sparrow_Semi_Active_Radar) + AIM_7E_Sparrow_Semi_Active_Radar = (7, Weapons.AIM_7E_Sparrow_Semi_Active_Radar) + AIM_120B_AMRAAM___Active_Rdr_AAM = (7, Weapons.AIM_120B_AMRAAM___Active_Rdr_AAM) + + class Pylon8: + AIM_7M_Sparrow_Semi_Active_Radar = (8, Weapons.AIM_7M_Sparrow_Semi_Active_Radar) + AIM_7F_Sparrow_Semi_Active_Radar = (8, Weapons.AIM_7F_Sparrow_Semi_Active_Radar) + AIM_7E_Sparrow_Semi_Active_Radar = (8, Weapons.AIM_7E_Sparrow_Semi_Active_Radar) + AIM_120B_AMRAAM___Active_Rdr_AAM = (8, Weapons.AIM_120B_AMRAAM___Active_Rdr_AAM) + + class Pylon9: + GBU_10___2000lb_Laser_Guided_Bomb = ( + 9, + Weapons.GBU_10___2000lb_Laser_Guided_Bomb, + ) + GBU_12___500lb_Laser_Guided_Bomb = (9, Weapons.GBU_12___500lb_Laser_Guided_Bomb) + BRU_42_with_3_x_Mk_20_Rockeye___490lbs_CBUs__247_x_HEAT_Bomblets = ( + 9, + Weapons.BRU_42_with_3_x_Mk_20_Rockeye___490lbs_CBUs__247_x_HEAT_Bomblets, + ) + BRU_42_with_3_x_Mk_82___500lb_GP_Bombs_LD = ( + 9, + Weapons.BRU_42_with_3_x_Mk_82___500lb_GP_Bombs_LD, + ) + Mk_84___2000lb_GP_Bomb_LD = (9, Weapons.Mk_84___2000lb_GP_Bomb_LD) + LAU_88_with_2_x_AGM_65K___Maverick_K__CCD_Imp_ASM_ = ( + 9, + Weapons.LAU_88_with_2_x_AGM_65K___Maverick_K__CCD_Imp_ASM_, + ) + LAU_88_with_2_x_AGM_65D___Maverick_D__IIR_ASM_ = ( + 9, + Weapons.LAU_88_with_2_x_AGM_65D___Maverick_D__IIR_ASM_, + ) + LAU_118a_with_AGM_45B_Shrike_ARM__Imp_ = ( + 9, + Weapons.LAU_118a_with_AGM_45B_Shrike_ARM__Imp_, + ) + LAU_10_pod___4_x_127mm_ZUNI__UnGd_Rkts_Mk71__HE_FRAG = ( + 9, + Weapons.LAU_10_pod___4_x_127mm_ZUNI__UnGd_Rkts_Mk71__HE_FRAG, + ) + _3_x_LAU_61_pods___57_x_2_75_Hydra__UnGd_Rkts_M151__HE = ( + 9, + Weapons._3_x_LAU_61_pods___57_x_2_75_Hydra__UnGd_Rkts_M151__HE, + ) + BRU_33_with_2_x_LAU_10_pod___4_x_127mm_ZUNI__UnGd_Rkts_Mk71__HE_FRAG = ( + 9, + Weapons.BRU_33_with_2_x_LAU_10_pod___4_x_127mm_ZUNI__UnGd_Rkts_Mk71__HE_FRAG, + ) + BRU_33_with_2_x_LAU_61_pod___19_x_2_75_Hydra__UnGd_Rkts_M151__HE = ( + 9, + Weapons.BRU_33_with_2_x_LAU_61_pod___19_x_2_75_Hydra__UnGd_Rkts_M151__HE, + ) + LAU_88_with_2_x_AGM_65D___Maverick_D__IIR_ASM_ = ( + 9, + Weapons.LAU_88_with_2_x_AGM_65D___Maverick_D__IIR_ASM_, + ) + LAU_88_with_3_x_AGM_65D___Maverick_D__IIR_ASM_ = ( + 9, + Weapons.LAU_88_with_3_x_AGM_65D___Maverick_D__IIR_ASM_, + ) + LAU_105_with_2_x_AIM_9M_Sidewinder_IR_AAM = ( + 9, + Weapons.LAU_105_with_2_x_AIM_9M_Sidewinder_IR_AAM, + ) + LAU_105_2_AIM_9L = (9, Weapons.LAU_105_2_AIM_9L) + LAU_105_with_2_x_AIM_9P_Sidewinder_IR_AAM = ( + 9, + Weapons.LAU_105_with_2_x_AIM_9P_Sidewinder_IR_AAM, + ) + LAU_105_2_AIM_9P5 = (9, Weapons.LAU_105_2_AIM_9P5) + LAU_7_with_2_x_AIM_9B_Sidewinder_IR_AAM = ( + 9, + Weapons.LAU_7_with_2_x_AIM_9B_Sidewinder_IR_AAM, + ) + LAU_105_2_AIM_9J = (9, WeaponsF4B.LAU_105_2_AIM_9J) + LAU_105_2_AIM_9JULI = (9, WeaponsF4B.LAU_105_2_AIM_9JULI) + AIM_120B_AMRAAM___Active_Rdr_AAM = (9, Weapons.AIM_120B_AMRAAM___Active_Rdr_AAM) + AIM_7F_Sparrow_Semi_Active_Radar = (9, Weapons.AIM_7F_Sparrow_Semi_Active_Radar) + AIM_7E_Sparrow_Semi_Active_Radar = (9, Weapons.AIM_7E_Sparrow_Semi_Active_Radar) + Mk_20_Rockeye___490lbs_CBU__247_x_HEAT_Bomblets = ( + 9, + Weapons.Mk_20_Rockeye___490lbs_CBU__247_x_HEAT_Bomblets, + ) + Mk_82___500lb_GP_Bomb_LD = (9, Weapons.Mk_82___500lb_GP_Bomb_LD) + TER_9A_with_3_x_Mk_82_Snakeye___500lb_GP_Bomb_HD = ( + 9, + Weapons.TER_9A_with_3_x_Mk_82_Snakeye___500lb_GP_Bomb_HD, + ) + BRU_33_with_2_x_Mk_83___1000lb_GP_Bomb_LD = ( + 9, + Weapons.BRU_33_with_2_x_Mk_83___1000lb_GP_Bomb_LD, + ) + + class Pylon10: + GBU_10___2000lb_Laser_Guided_Bomb = ( + 10, + Weapons.GBU_10___2000lb_Laser_Guided_Bomb, + ) + GBU_12___500lb_Laser_Guided_Bomb = ( + 10, + Weapons.GBU_12___500lb_Laser_Guided_Bomb, + ) + BRU_42_with_3_x_Mk_20_Rockeye___490lbs_CBUs__247_x_HEAT_Bomblets = ( + 10, + Weapons.BRU_42_with_3_x_Mk_20_Rockeye___490lbs_CBUs__247_x_HEAT_Bomblets, + ) + Mk_84___2000lb_GP_Bomb_LD = (10, Weapons.Mk_84___2000lb_GP_Bomb_LD) + LAU_10_pod___4_x_127mm_ZUNI__UnGd_Rkts_Mk71__HE_FRAG = ( + 10, + Weapons.LAU_10_pod___4_x_127mm_ZUNI__UnGd_Rkts_Mk71__HE_FRAG, + ) + 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, + ) + _3_x_LAU_61_pods___57_x_2_75_Hydra__UnGd_Rkts_M151__HE = ( + 10, + Weapons._3_x_LAU_61_pods___57_x_2_75_Hydra__UnGd_Rkts_M151__HE, + ) + LAU_61_pod___19_x_2_75_Hydra__UnGd_Rkts_M156__Wht_Phos = ( + 10, + Weapons.LAU_61_pod___19_x_2_75_Hydra__UnGd_Rkts_M156__Wht_Phos, + ) + LAU_118a_with_AGM_45B_Shrike_ARM__Imp_ = ( + 10, + Weapons.LAU_118a_with_AGM_45B_Shrike_ARM__Imp_, + ) + Smokewinder___red = (10, Weapons.Smokewinder___red) + Smokewinder___green = (10, Weapons.Smokewinder___green) + Smokewinder___blue = (10, Weapons.Smokewinder___blue) + Smokewinder___white = (10, Weapons.Smokewinder___white) + Smokewinder___yellow = (10, Weapons.Smokewinder___yellow) + BRU_33_with_2_x_LAU_10_pod___4_x_127mm_ZUNI__UnGd_Rkts_Mk71__HE_FRAG = ( + 10, + Weapons.BRU_33_with_2_x_LAU_10_pod___4_x_127mm_ZUNI__UnGd_Rkts_Mk71__HE_FRAG, + ) + BRU_33_with_2_x_LAU_61_pod___19_x_2_75_Hydra__UnGd_Rkts_M151__HE = ( + 10, + Weapons.BRU_33_with_2_x_LAU_61_pod___19_x_2_75_Hydra__UnGd_Rkts_M151__HE, + ) + BRU_41A_with_6_x_Mk_82___500lb_GP_Bomb_LD = ( + 10, + Weapons.BRU_41A_with_6_x_Mk_82___500lb_GP_Bomb_LD, + ) + BRU_33_with_2_x_GBU_12___500lb_Laser_Guided_Bomb = ( + 10, + Weapons.BRU_33_with_2_x_GBU_12___500lb_Laser_Guided_Bomb, + ) + VSN_F4ER_PTB = (10, WeaponsF4B.VSN_F4ER_PTB) + + class Pylon11: + L005_Sorbtsiya_ECM_pod__left_ = (11, Weapons.L005_Sorbtsiya_ECM_pod__left_) + L_081_Fantasmagoria_ELINT_pod = (11, Weapons.L_081_Fantasmagoria_ELINT_pod) + + pylons = {1, 2, 3, 4, 5, 6, 7, 8, 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.CAP diff --git a/qt_ui/main.py b/qt_ui/main.py index 5f0382a4..d7be6b0f 100644 --- a/qt_ui/main.py +++ b/qt_ui/main.py @@ -294,6 +294,7 @@ def create_game( ), ModSettings( a4_skyhawk=False, + f4b_phantom=False, f22_raptor=False, f100_supersabre=False, f104_starfighter=False, diff --git a/qt_ui/windows/newgame/QNewGameWizard.py b/qt_ui/windows/newgame/QNewGameWizard.py index 1c984c36..0730b98d 100644 --- a/qt_ui/windows/newgame/QNewGameWizard.py +++ b/qt_ui/windows/newgame/QNewGameWizard.py @@ -159,6 +159,7 @@ class NewGameWizard(QtWidgets.QWizard): ) mod_settings = ModSettings( a4_skyhawk=self.field("a4_skyhawk"), + f4b_phantom=self.field("f4b_phantom"), f15d_baz=self.field("f15d_baz"), f22_raptor=self.field("f22_raptor"), f100_supersabre=self.field("f100_supersabre"), @@ -659,6 +660,8 @@ class GeneratorOptions(QtWidgets.QWizardPage): self.registerField("hercules", hercules) uh_60l = QtWidgets.QCheckBox() self.registerField("uh_60l", uh_60l) + f4b_phantom = QtWidgets.QCheckBox() + self.registerField("f4b_phantom", f4b_phantom) f15d_baz = QtWidgets.QCheckBox() self.registerField("f15d_baz", f15d_baz) f22_raptor = QtWidgets.QCheckBox() @@ -692,6 +695,13 @@ class GeneratorOptions(QtWidgets.QWizardPage): ) modLayout.addWidget(a4_skyhawk, modLayout_row, 1) modLayout_row += 1 + modLayout.addWidget( + QtWidgets.QLabel("F-4B Phantom II (v2.7.10.02 EFM + Patch 2022.10.02)"), + modLayout_row, + 0, + ) + modLayout.addWidget(f4b_phantom, modLayout_row, 1) + modLayout_row += 1 modLayout.addWidget(QtWidgets.QLabel("F-15D Baz (v1.0)"), modLayout_row, 0) modLayout.addWidget(f15d_baz, modLayout_row, 1) modLayout_row += 1 @@ -705,12 +715,12 @@ class GeneratorOptions(QtWidgets.QWizardPage): ) modLayout.addWidget(f100_supersabre, modLayout_row, 1) modLayout_row += 1 - modLayout.addWidget(QtWidgets.QLabel("F-104 Starfighter"), modLayout_row, 0) - modLayout.addWidget(f104_starfighter, modLayout_row, 1) - modLayout_row += 1 # Section break here for readability modLayout.addWidget(QtWidgets.QWidget(), modLayout_row, 0) modLayout_row += 1 + modLayout.addWidget(QtWidgets.QLabel("F-104 Starfighter"), modLayout_row, 0) + modLayout.addWidget(f104_starfighter, modLayout_row, 1) + modLayout_row += 1 modLayout.addWidget( QtWidgets.QLabel("F-105 Thunderchief (version 2.7.12.23x)"), modLayout_row, @@ -718,9 +728,6 @@ class GeneratorOptions(QtWidgets.QWizardPage): ) modLayout.addWidget(f105_thunderchief, modLayout_row, 1) modLayout_row += 1 - # Section break here for readability - modLayout.addWidget(QtWidgets.QWidget(), modLayout_row, 0) - modLayout_row += 1 modLayout.addWidget( QtWidgets.QLabel("C-130J-30 Super Hercules"), modLayout_row, 0 ) @@ -736,6 +743,9 @@ class GeneratorOptions(QtWidgets.QWizardPage): ) modLayout.addWidget(jas39_gripen, modLayout_row, 1) modLayout_row += 1 + # Section break here for readability + modLayout.addWidget(QtWidgets.QWidget(), modLayout_row, 0) + modLayout_row += 1 modLayout.addWidget( QtWidgets.QLabel("Su-30 Flanker-H (V2.01B)"), modLayout_row, 0 ) @@ -744,9 +754,6 @@ class GeneratorOptions(QtWidgets.QWizardPage): modLayout.addWidget(QtWidgets.QLabel("Su-57 Felon"), modLayout_row, 0) modLayout.addWidget(su57_felon, modLayout_row, 1) modLayout_row += 1 - # Section break here for readability - modLayout.addWidget(QtWidgets.QWidget(), modLayout_row, 0) - modLayout_row += 1 modLayout.addWidget(QtWidgets.QLabel("Frenchpack"), modLayout_row, 0) modLayout.addWidget(frenchpack, modLayout_row, 1) modLayout_row += 1 diff --git a/resources/customized_payloads/VSN_F4B.lua b/resources/customized_payloads/VSN_F4B.lua new file mode 100644 index 00000000..9321978d --- /dev/null +++ b/resources/customized_payloads/VSN_F4B.lua @@ -0,0 +1,186 @@ +local unitPayloads = { + ["name"] = "VSN_F4B", + ["payloads"] = { + [1] = { + ["name"] = "CAP", + ["pylons"] = { + [1] = { + ["CLSID"] = "VSN_F4EL_PTB", + ["num"] = 2, + }, + [2] = { + ["CLSID"] = "LAU-105_2*AIM-9L", + ["num"] = 3, + }, + [3] = { + ["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}", + ["num"] = 4, + }, + [4] = { + ["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}", + ["num"] = 5, + }, + [5] = { + ["CLSID"] = "{VSN_F4B_Gunpod}", + ["num"] = 6, + }, + [6] = { + ["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}", + ["num"] = 7, + }, + [7] = { + ["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}", + ["num"] = 8, + }, + [8] = { + ["CLSID"] = "LAU-105_2*AIM-9L", + ["num"] = 9, + }, + [9] = { + ["CLSID"] = "VSN_F4ER_PTB", + ["num"] = 10, + }, + }, + ["tasks"] = { + [1] = 11, + }, + }, + [2] = { + ["name"] = "STRIKE", + ["pylons"] = { + [1] = { + ["CLSID"] = "{51F9AAE5-964F-4D21-83FB-502E3BFE5F8A}", + ["num"] = 2, + }, + [2] = { + ["CLSID"] = "{51F9AAE5-964F-4D21-83FB-502E3BFE5F8A}", + ["num"] = 3, + }, + [3] = { + ["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}", + ["num"] = 4, + }, + [4] = { + ["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}", + ["num"] = 5, + }, + [5] = { + ["CLSID"] = "VSN_F4EC_PTB", + ["num"] = 6, + }, + [6] = { + ["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}", + ["num"] = 7, + }, + [7] = { + ["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}", + ["num"] = 8, + }, + [8] = { + ["CLSID"] = "{51F9AAE5-964F-4D21-83FB-502E3BFE5F8A}", + ["num"] = 9, + }, + [9] = { + ["CLSID"] = "{51F9AAE5-964F-4D21-83FB-502E3BFE5F8A}", + ["num"] = 10, + }, + }, + ["tasks"] = { + [1] = 32, + }, + }, + [3] = { + ["displayName"] = "Liberation OCA/Runway", + ["name"] = "Liberation OCA/Runway", + ["pylons"] = { + [1] = { + ["CLSID"] = "{AB8B8299-F1CC-4359-89B5-2172E0CF4A5A}", + ["num"] = 2, + }, + [2] = { + ["CLSID"] = "{AB8B8299-F1CC-4359-89B5-2172E0CF4A5A}", + ["num"] = 3, + }, + [3] = { + ["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}", + ["num"] = 4, + }, + [4] = { + ["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}", + ["num"] = 5, + }, + [5] = { + ["CLSID"] = "VSN_F4EC_PTB", + ["num"] = 6, + }, + [6] = { + ["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}", + ["num"] = 7, + }, + [7] = { + ["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}", + ["num"] = 8, + }, + [8] = { + ["CLSID"] = "{AB8B8299-F1CC-4359-89B5-2172E0CF4A5A}", + ["num"] = 9, + }, + [9] = { + ["CLSID"] = "{AB8B8299-F1CC-4359-89B5-2172E0CF4A5A}", + ["num"] = 10, + }, + }, + ["tasks"] = { + [1] = 32, + }, + }, + [4] = { + ["name"] = "CAS", + ["pylons"] = { + [1] = { + ["CLSID"] = "{B83CB620-5BBE-4BEA-910C-EB605A327EF9}", + ["num"] = 2, + }, + [2] = { + ["CLSID"] = "{BRU33_2*LAU10}", + ["num"] = 3, + }, + [3] = { + ["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}", + ["num"] = 4, + }, + [4] = { + ["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}", + ["num"] = 5, + }, + [5] = { + ["CLSID"] = "VSN_F4EC_PTB", + ["num"] = 6, + }, + [6] = { + ["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}", + ["num"] = 7, + }, + [7] = { + ["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}", + ["num"] = 8, + }, + [8] = { + ["CLSID"] = "{BRU33_2*LAU10}", + ["num"] = 9, + }, + [9] = { + ["CLSID"] = "{B83CB620-5BBE-4BEA-910C-EB605A327EF9}", + ["num"] = 10, + }, + }, + ["tasks"] = { + [1] = 31, + }, + }, + }, + ["tasks"] = { + }, + ["unitType"] = "VSN_F4B", +} +return unitPayloads diff --git a/resources/factions/usa_1965.json b/resources/factions/usa_1965.json index 93c15719..4ed06128 100644 --- a/resources/factions/usa_1965.json +++ b/resources/factions/usa_1965.json @@ -10,6 +10,7 @@ "B-52H Stratofortress", "C-130", "CH-47D", + "F-4B Phantom II", "F-4E Phantom II", "F-5E Tiger II", "F-100 Super Sabre", diff --git a/resources/factions/usa_1975.json b/resources/factions/usa_1975.json index 10c2286d..2ee7c462 100644 --- a/resources/factions/usa_1975.json +++ b/resources/factions/usa_1975.json @@ -12,6 +12,7 @@ "CH-47D", "CH-53E", "F-14A Tomcat (Block 135-GR Late)", + "F-4B Phantom II", "F-4E Phantom II", "F-5E Tiger II", "F-100 Super Sabre", diff --git a/resources/factions/usn_1985.json b/resources/factions/usn_1985.json index df4f13ce..26b54b5e 100644 --- a/resources/factions/usn_1985.json +++ b/resources/factions/usn_1985.json @@ -11,6 +11,7 @@ "A-4E Skyhawk", "F-14A Tomcat (Block 135-GR Late)", "F-14B Tomcat", + "F-4B Phantom II", "F-4E Phantom II", "S-3B Viking", "SH-60B Seahawk", diff --git a/resources/ui/units/aircrafts/banners/VSN_F4B_24.jpg b/resources/ui/units/aircrafts/banners/VSN_F4B_24.jpg new file mode 100644 index 00000000..4ec38c89 Binary files /dev/null and b/resources/ui/units/aircrafts/banners/VSN_F4B_24.jpg differ diff --git a/resources/ui/units/aircrafts/icons/VSN_F4B_24.jpg b/resources/ui/units/aircrafts/icons/VSN_F4B_24.jpg new file mode 100644 index 00000000..21e47eac Binary files /dev/null and b/resources/ui/units/aircrafts/icons/VSN_F4B_24.jpg differ diff --git a/resources/units/aircraft/VSN_F4B.yaml b/resources/units/aircraft/VSN_F4B.yaml new file mode 100644 index 00000000..6b40183e --- /dev/null +++ b/resources/units/aircraft/VSN_F4B.yaml @@ -0,0 +1,20 @@ +description: + Proving highly adaptable, the F-4 entered service with the Navy in 1961 + before it was adopted by the United States Marine Corps and the United States Air + Force, and by the mid-1960s it had become a major part of their air arms. Phantom + production ran from 1958 to 1981 with a total of 5,195 aircraft built, making it + the most produced American supersonic military aircraft in history, and cementing + its position as an iconic combat aircraft of the Cold War. The F-4 was used extensively + during the Vietnam War. It served as the principal air superiority fighter for the + U.S. Air Force, Navy, and Marine Corps and became important in the ground-attack + and aerial reconnaissance roles late in the war. +introduced: 1968 +manufacturer: McDonnell Douglas +origin: USA +price: 10 +role: Fighter-Bomber +max_range: 370 +carrier_capable: true +variants: + F-4B Phantom II: {} +