Add Tornado F3 ADV (1.0) mod support

This commit is contained in:
Drexyl 2025-07-08 22:32:42 +10:00 committed by Raffson
parent 23a7add2f1
commit 4412a0fa91
12 changed files with 302 additions and 0 deletions

View File

@ -7,6 +7,7 @@
* **[Modding]** Update Grinelli Designs F-22A Mod to 2.0.0 (May 2025)
* **[Campaign Design]** Added support for Germany Cold War terrain by Ugra Media
* **[Options]** New option to control EPLRS-task injection in mission generator
* **[Modding]** Add Tornado F3 ADV (v1.0, requires FC3 fix)
## Fixes
* **[Flight Plans]** Fixed a bug when a package was created with only escort flights

View File

@ -865,6 +865,9 @@ class Faction:
# MiG-31BM
if not mod_settings.mig31bm_foxhound:
self.remove_aircraft("MiG-31BM")
# Tornado f.3 ADV (1.0)
if not mod_settings.tornado_adv:
self.remove_aircraft("Tornado_ADV")
def remove_aircraft(self, name: str) -> None:
for aircraft_set in [self.aircraft, self.awacs, self.tankers]:

View File

@ -95,6 +95,7 @@ class ModSettings:
su15_flagon: bool = False
su30_flanker_h: bool = False
su57_felon: bool = False
tornado_adv: bool = False
frenchpack: bool = False
high_digit_sams: bool = False
ov10a_bronco: bool = False

View File

@ -41,6 +41,7 @@ from .chinesemilitaryassetspack import *
from .russianmilitaryassetspack import *
from .usamilitaryassetspack import *
from .ukrainemilitaryassetspack import *
from .tornado_adv import *
def load_mods() -> None:

View File

@ -0,0 +1 @@
from .tornado_adv import *

View File

@ -0,0 +1,143 @@
from typing import Dict, List, Set, Any
from dcs import task
from dcs.planes import PlaneType
from dcs.unitpropertydescription import UnitPropertyDescription
from dcs.weapons_data import Weapons
from dcs.unitpropertydescription import UnitPropertyDescription
from game.modsupport import planemod
from pydcs_extensions.weapon_injector import inject_weapons
class WeaponsTORNADO_ADV:
Skyflash__Semi_Active_Radar_AAM_ = {
"clsid": "{Skflash1}",
"name": "Skyflash (Semi-Active Radar AAM)",
"weight": 194,
}
inject_weapons(WeaponsTORNADO_ADV)
@planemod
class Tornado_ADV(PlaneType):
id = "Tornado_ADV"
flyable = True
height = 5.7
width = 13.9
length = 16.7
fuel_max = 4660
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 = "TORNADO_ADV" # from type
class Pylon1:
AIM_9P_Sidewinder_IR_AAM = (1, Weapons.AIM_9P_Sidewinder_IR_AAM)
AIM_9M_Sidewinder_IR_AAM = (1, Weapons.AIM_9M_Sidewinder_IR_AAM)
# ERRR {JAS39_ASRAAM}
AIM_9P5_Sidewinder_IR_AAM = (1, Weapons.AIM_9P5_Sidewinder_IR_AAM)
AIM_9L_Sidewinder_IR_AAM = (1, Weapons.AIM_9L_Sidewinder_IR_AAM)
class Pylon2:
Fuel_Tank_800_L__21_ = (2, Weapons.Fuel_Tank_800_L__21_)
class Pylon3:
AIM_9P_Sidewinder_IR_AAM = (3, Weapons.AIM_9P_Sidewinder_IR_AAM)
AIM_9M_Sidewinder_IR_AAM = (3, Weapons.AIM_9M_Sidewinder_IR_AAM)
# ERRR {JAS39_ASRAAM}
AIM_9P5_Sidewinder_IR_AAM = (3, Weapons.AIM_9P5_Sidewinder_IR_AAM)
AIM_9L_Sidewinder_IR_AAM = (3, Weapons.AIM_9L_Sidewinder_IR_AAM)
class Pylon5:
AIM_120B_AMRAAM___Active_Radar_AAM = (
5,
Weapons.AIM_120B_AMRAAM___Active_Radar_AAM,
)
AIM_120C_AMRAAM___Active_Radar_AAM = (
5,
Weapons.AIM_120C_AMRAAM___Active_Radar_AAM,
)
Skyflash__Semi_Active_Radar_AAM_ = (
5,
WeaponsTORNADO_ADV.Skyflash__Semi_Active_Radar_AAM_,
)
class Pylon6:
AIM_120B_AMRAAM___Active_Radar_AAM = (
6,
Weapons.AIM_120B_AMRAAM___Active_Radar_AAM,
)
AIM_120C_AMRAAM___Active_Radar_AAM = (
6,
Weapons.AIM_120C_AMRAAM___Active_Radar_AAM,
)
Skyflash__Semi_Active_Radar_AAM_ = (
6,
WeaponsTORNADO_ADV.Skyflash__Semi_Active_Radar_AAM_,
)
class Pylon7:
AIM_120B_AMRAAM___Active_Radar_AAM = (
7,
Weapons.AIM_120B_AMRAAM___Active_Radar_AAM,
)
AIM_120C_AMRAAM___Active_Radar_AAM = (
7,
Weapons.AIM_120C_AMRAAM___Active_Radar_AAM,
)
Skyflash__Semi_Active_Radar_AAM_ = (
7,
WeaponsTORNADO_ADV.Skyflash__Semi_Active_Radar_AAM_,
)
class Pylon8:
AIM_120B_AMRAAM___Active_Radar_AAM = (
8,
Weapons.AIM_120B_AMRAAM___Active_Radar_AAM,
)
AIM_120C_AMRAAM___Active_Radar_AAM = (
8,
Weapons.AIM_120C_AMRAAM___Active_Radar_AAM,
)
Skyflash__Semi_Active_Radar_AAM_ = (
8,
WeaponsTORNADO_ADV.Skyflash__Semi_Active_Radar_AAM_,
)
class Pylon10:
AIM_9P_Sidewinder_IR_AAM = (10, Weapons.AIM_9P_Sidewinder_IR_AAM)
AIM_9M_Sidewinder_IR_AAM = (10, Weapons.AIM_9M_Sidewinder_IR_AAM)
# ERRR {JAS39_ASRAAM}
AIM_9P5_Sidewinder_IR_AAM = (10, Weapons.AIM_9P5_Sidewinder_IR_AAM)
AIM_9L_Sidewinder_IR_AAM = (10, Weapons.AIM_9L_Sidewinder_IR_AAM)
class Pylon11:
Fuel_Tank_800_L__21_ = (11, Weapons.Fuel_Tank_800_L__21_)
class Pylon12:
AIM_9P_Sidewinder_IR_AAM = (12, Weapons.AIM_9P_Sidewinder_IR_AAM)
AIM_9M_Sidewinder_IR_AAM = (12, Weapons.AIM_9M_Sidewinder_IR_AAM)
# ERRR {JAS39_ASRAAM}
AIM_9P5_Sidewinder_IR_AAM = (12, Weapons.AIM_9P5_Sidewinder_IR_AAM)
AIM_9L_Sidewinder_IR_AAM = (12, Weapons.AIM_9L_Sidewinder_IR_AAM)
pylons: Set[int] = {1, 2, 3, 5, 6, 7, 8, 10, 11, 12}
tasks = [
task.CAP,
task.Escort,
task.FighterSweep,
task.Intercept,
task.Reconnaissance,
]
task_default = task.CAP

View File

@ -131,6 +131,7 @@ class NewGameWizard(QtWidgets.QWizard):
usamilitaryassetspack=self.field("usamilitaryassetspack"),
ukrainemilitaryassetspack=self.field("ukrainemilitaryassetspack"),
mig31bm_foxhound=self.field("mig31bm_foxhound"),
tornado_adv=self.field("tornado_adv"),
)
blue_faction = self.faction_selection_page.selected_blue_faction

View File

@ -174,6 +174,8 @@ class GeneratorOptions(QtWidgets.QWizardPage):
self.registerField("ukrainemilitaryassetspack", self.ukrainemilitaryassetspack)
self.mig31bm_foxhound = QtWidgets.QCheckBox()
self.registerField("mig31bm_foxhound", self.mig31bm_foxhound)
self.tornado_adv = QtWidgets.QCheckBox()
self.registerField("tornado_adv", self.tornado_adv)
modHelpText = QtWidgets.QLabel(
"<p>Select the mods you have installed. If your chosen factions support them, you'll be able to use these mods in your campaign.</p>"
@ -240,6 +242,7 @@ class GeneratorOptions(QtWidgets.QWizardPage):
("Su-30 Flanker-H (V2.7.73b)", self.su30_flanker_h),
("Su-57 Felon (build-04)", self.su57_felon),
("Super Étendard (v2.5.5)", self.super_etendard),
("Tornado F3 ADV (1.0)", self.tornado_adv),
("UH-60L Black Hawk (v1.3.1)", self.uh_60l),
("Vietnam War Vessels (v0.9.0 by TeTeT)", self.vietnamwarvessels),
]
@ -323,3 +326,4 @@ class GeneratorOptions(QtWidgets.QWizardPage):
self.ukrainemilitaryassetspack.setChecked(
s.get("ukrainemilitaryassetspack", False)
)
self.tornado_adv.setChecked(s.get("tornado_adv", False))

View File

@ -0,0 +1,107 @@
local unitPayloads = {
["name"] = "Tornado_ADV",
["payloads"] = {
[1] = {
["name"] = "Retribution Escort",
["pylons"] = {
[1] = {
["CLSID"] = "{AIM-9P5}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{PTB_800_MIG21}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{AIM-9P5}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
["num"] = 8,
},
[8] = {
["CLSID"] = "{AIM-9P5}",
["num"] = 10,
},
[9] = {
["CLSID"] = "{PTB_800_MIG21}",
["num"] = 11,
},
[10] = {
["CLSID"] = "{AIM-9P5}",
["num"] = 12,
},
},
["tasks"] = {
[1] = 18,
[2] = 11,
[3] = 10,
},
},
[2] = {
["name"] = "Retribution BARCAP",
["pylons"] = {
[1] = {
["CLSID"] = "{AIM-9P5}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{PTB_800_MIG21}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{AIM-9P5}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
["num"] = 8,
},
[8] = {
["CLSID"] = "{AIM-9P5}",
["num"] = 10,
},
[9] = {
["CLSID"] = "{PTB_800_MIG21}",
["num"] = 11,
},
[10] = {
["CLSID"] = "{AIM-9P5}",
["num"] = 12,
},
},
["tasks"] = {
[1] = 18,
[2] = 11,
[3] = 10,
},
},
},
["unitType"] = "Tornado_ADV",
}
return unitPayloads

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -0,0 +1,40 @@
description:
"The Tornado ADV (Air Defence Variant) is an advanced interceptor aircraft developed by British
Aerospace, now part of BAE Systems. This aircraft was designed primarily for air defense and is
equipped with sophisticated radar and missile systems to detect and engage enemy aircraft at
long ranges. The Tornado ADV is equipped with the AI.24 Foxhunter radar, which provides long-range
detection and tracking capabilities. It can carry a variety of air-to-air missiles,
including the AMRAAM (Advanced Medium-Range Air-to-Air Missile) and the Skyflash missile. The
aircraft is capable of high-speed intercepts and has excellent maneuverability, making it
effective in air-to-air combat."
introduced: 1985
manufacturer: Panavia
origin: UK/Italy/West Germany
price: 17
role: Interceptor
max_range: 350
fuel:
# Parking 44 to RWY 06L at Anderson AFB.
taxi: 200
# AB takeoff to 350/0.75, reduce to MIL and maintain 350/0.75 to 25k ft.
climb_ppm: 28.33
# 0.85 mach for 100NM.
cruise_ppm: 12
# MIL for 100NM. Occasional AB use.
combat_ppm: 26
min_safe: 1000
variants:
Tornado F3 ADV: {}
#radios:
# intra_flight: AN/ARC-222
# inter_flight: AN/ARC-164
# channels:
# type: common
# namer: viper
# # COM2 is the AN/ARC-222, which is the VHF radio we want to use for
# # intra-flight communication to leave COM1 open for UHF inter-flight.
# intra_flight_radio_index: 2
# inter_flight_radio_index: 1
tasks:
BARCAP: 500
Escort: 500