Support for VSN F-106 Delta Dart (#319)

* Add Delta Dart

* Added Banners and Icons

* Add loadouts

* Update f106.py

* Update f106.py

* Update VSN_F106A.yaml

* Update VSN_F106B.yaml

* Added the F-106 Delta Dart to factions. Also, replaced the banner with one by datoneslav, used with permission. Includes the official VSN logo (also used with permission). Also tweaked the backgrounds of the icons to blue to match the other aircraft.

* Added changelog entry.

* Add files via upload

---------

Co-authored-by: MetalStormGhost <ghosti@smytky.org>
This commit is contained in:
M Chimiste 2024-05-21 17:03:53 -04:00 committed by GitHub
parent 3b65a0ab88
commit c947ac0ef1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
19 changed files with 454 additions and 0 deletions

View File

@ -7,6 +7,7 @@
* **[Campaigns/Factions]** Support for inline recommended faction in campaign's yaml file
* **[Squadrons]** Ability to define a livery-set for each squadron from which Retribution will randomly choose during mission generation
* **[Modding]** Updated support for F/A-18E/F/G mod version 2.2.5
* **[Modding]** Added VSN F-106 Delta Dart mod support (v2.9.4.101)
* **[Campaign Setup]** Allow adjustments to naval TGOs (except carriers) on turn 0
* **[Campaign Design]** Ability to configure specific carrier names & types in campaign's yaml file
* **[Mission Generation]** Ability to inject custom kneeboards

View File

@ -397,6 +397,9 @@ class Faction:
if not mod_settings.f105_thunderchief:
self.remove_aircraft("VSN_F105D")
self.remove_aircraft("VSN_F105G")
if not mod_settings.f106_deltadart:
self.remove_aircraft("VSN_F106A")
self.remove_aircraft("VSN_F106B")
if not mod_settings.a6a_intruder:
self.remove_aircraft("VSN_A6A")
if not mod_settings.jas39_gripen:

View File

@ -80,6 +80,7 @@ class ModSettings:
f100_supersabre: bool = False
f104_starfighter: bool = False
f105_thunderchief: bool = False
f106_deltadart: bool = False
hercules: bool = False
irondome: bool = False
uh_60l: bool = False

View File

@ -6,6 +6,7 @@ from .f9f import *
from .f100 import *
from .f104 import *
from .f105 import *
from .f106 import *
from .f15d import *
from .f15i_idf import *
from .f16i_idf import *

View File

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

View File

@ -0,0 +1,304 @@
from typing import Set
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 WeaponsF106:
Fuel_Tank = {"clsid": "{VSN_F106L_PTB}", "name": "Fuel Tank", "weight": 1187}
Fuel_Tank_ = {"clsid": "{VSN_F106R_PTB}", "name": "Fuel Tank", "weight": 1187}
AIM_4D_Rear_aspect_advanced_heat_seeking_air_to_air_missile_ = {
"clsid": "{Hughes AIM-4D}",
"name": "AIM-4D Rear aspect advanced heat-seeking air-to-air missile.",
"weight": 60.8,
}
AIM_4F_Semi_active_radar_homing_air_to_air_missile_ = {
"clsid": "{Hughes AIM-4F}",
"name": "AIM-4F Semi active radar-homing air-to-air missile.",
"weight": 66,
}
AIM_4G_Rear_aspect_heat_seeking_air_to_air_missile_ = {
"clsid": "{Hughes AIM-4G}",
"name": "AIM-4G Rear aspect heat seeking air-to-air missile.",
"weight": 66,
}
AIR_2A_Genie_Nuclear_air_to_air_unguided_rocket_ = {
"clsid": "{AIR-2A}",
"name": "AIR-2A Genie Nuclear air-to-air unguided rocket.",
"weight": 66,
}
L005_Sorbtsiya_ECM_pod__left_ = {
"clsid": "{44EE8698-89F9-48EE-AF36-5FD31896A82F}",
"name": "L005 Sorbtsiya ECM pod (left)",
"weight": 150,
}
L005_Sorbtsiya_ECM_pod__right_ = {
"clsid": "{44EE8698-89F9-48EE-AF36-5FD31896A82A}",
"name": "L005 Sorbtsiya ECM pod (right)",
"weight": 150,
}
inject_weapons(WeaponsF106)
@planemod
class VSN_F106A(PlaneType):
id = "VSN_F106A"
flyable = True
height = 6.18
width = 11.67
length = 21.56
fuel_max = 4464
max_speed = 2452.032
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_F106A" # 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)
Weapons.Fuel_Tank = (1, Weapons.Fuel_Tank)
# ERRR <CLEAN>
class Pylon2:
Weapons.AIM_4D_Rear_aspect_advanced_heat_seeking_air_to_air_missile_ = (
2,
Weapons.AIM_4D_Rear_aspect_advanced_heat_seeking_air_to_air_missile_,
)
Weapons.AIM_4F_Semi_active_radar_homing_air_to_air_missile_ = (
2,
Weapons.AIM_4F_Semi_active_radar_homing_air_to_air_missile_,
)
Weapons.AIM_4G_Rear_aspect_heat_seeking_air_to_air_missile_ = (
2,
Weapons.AIM_4G_Rear_aspect_heat_seeking_air_to_air_missile_,
)
class Pylon3:
Weapons.AIM_4D_Rear_aspect_advanced_heat_seeking_air_to_air_missile_ = (
3,
Weapons.AIM_4D_Rear_aspect_advanced_heat_seeking_air_to_air_missile_,
)
Weapons.AIM_4F_Semi_active_radar_homing_air_to_air_missile_ = (
3,
Weapons.AIM_4F_Semi_active_radar_homing_air_to_air_missile_,
)
Weapons.AIM_4G_Rear_aspect_heat_seeking_air_to_air_missile_ = (
3,
Weapons.AIM_4G_Rear_aspect_heat_seeking_air_to_air_missile_,
)
class Pylon4:
Weapons.AIR_2A_Genie_Nuclear_air_to_air_unguided_rocket_ = (
4,
Weapons.AIR_2A_Genie_Nuclear_air_to_air_unguided_rocket_,
)
# ERRR <CLEAN>
class Pylon5:
Weapons.AIM_4D_Rear_aspect_advanced_heat_seeking_air_to_air_missile_ = (
5,
Weapons.AIM_4D_Rear_aspect_advanced_heat_seeking_air_to_air_missile_,
)
Weapons.AIM_4F_Semi_active_radar_homing_air_to_air_missile_ = (
5,
Weapons.AIM_4F_Semi_active_radar_homing_air_to_air_missile_,
)
Weapons.AIM_4G_Rear_aspect_heat_seeking_air_to_air_missile_ = (
5,
Weapons.AIM_4G_Rear_aspect_heat_seeking_air_to_air_missile_,
)
class Pylon6:
Weapons.AIM_4D_Rear_aspect_advanced_heat_seeking_air_to_air_missile_ = (
6,
Weapons.AIM_4D_Rear_aspect_advanced_heat_seeking_air_to_air_missile_,
)
Weapons.AIM_4F_Semi_active_radar_homing_air_to_air_missile_ = (
6,
Weapons.AIM_4F_Semi_active_radar_homing_air_to_air_missile_,
)
Weapons.AIM_4G_Rear_aspect_heat_seeking_air_to_air_missile_ = (
6,
Weapons.AIM_4G_Rear_aspect_heat_seeking_air_to_air_missile_,
)
class Pylon7:
Smokewinder___red = (7, Weapons.Smokewinder___red)
Smokewinder___green = (7, Weapons.Smokewinder___green)
Smokewinder___blue = (7, Weapons.Smokewinder___blue)
Smokewinder___white = (7, Weapons.Smokewinder___white)
Smokewinder___yellow = (7, Weapons.Smokewinder___yellow)
Weapons.Fuel_Tank_ = (7, Weapons.Fuel_Tank_)
# ERRR <CLEAN>
class Pylon8:
WeaponsF106.L005_Sorbtsiya_ECM_pod__left_ = (
8,
Weapons.L005_Sorbtsiya_ECM_pod__left_,
)
class Pylon9:
Smoke_Generator___red_ = (9, Weapons.Smoke_Generator___red_)
Smoke_Generator___green_ = (9, Weapons.Smoke_Generator___green_)
Smoke_Generator___blue_ = (9, Weapons.Smoke_Generator___blue_)
Smoke_Generator___white_ = (9, Weapons.Smoke_Generator___white_)
Smoke_Generator___yellow_ = (9, Weapons.Smoke_Generator___yellow_)
Smoke_Generator___orange_ = (9, Weapons.Smoke_Generator___orange_)
pylons: Set[int] = {1, 2, 3, 4, 5, 6, 7, 8, 9}
tasks = [
task.CAP,
task.Escort,
task.FighterSweep,
task.Intercept,
task.Reconnaissance,
]
task_default = task.FighterSweep
@planemod
class VSN_F106B(PlaneType):
id = "VSN_F106B"
flyable = True
height = 6.18
width = 11.67
length = 21.56
fuel_max = 4464
max_speed = 2452.032
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_F106B" # 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)
Fuel_Tank = (1, Weapons.Fuel_Tank)
# ERRR <CLEAN>
class Pylon2:
Weapons.AIM_4D_Rear_aspect_advanced_heat_seeking_air_to_air_missile_ = (
2,
Weapons.AIM_4D_Rear_aspect_advanced_heat_seeking_air_to_air_missile_,
)
Weapons.AIM_4F_Semi_active_radar_homing_air_to_air_missile_ = (
2,
Weapons.AIM_4F_Semi_active_radar_homing_air_to_air_missile_,
)
Weapons.AIM_4G_Rear_aspect_heat_seeking_air_to_air_missile_ = (
2,
Weapons.AIM_4G_Rear_aspect_heat_seeking_air_to_air_missile_,
)
class Pylon3:
Weapons.AIM_4D_Rear_aspect_advanced_heat_seeking_air_to_air_missile_ = (
3,
Weapons.AIM_4D_Rear_aspect_advanced_heat_seeking_air_to_air_missile_,
)
Weapons.AIM_4F_Semi_active_radar_homing_air_to_air_missile_ = (
3,
Weapons.AIM_4F_Semi_active_radar_homing_air_to_air_missile_,
)
Weapons.AIM_4G_Rear_aspect_heat_seeking_air_to_air_missile_ = (
3,
Weapons.AIM_4G_Rear_aspect_heat_seeking_air_to_air_missile_,
)
class Pylon4:
Weapons.AIR_2A_Genie_Nuclear_air_to_air_unguided_rocket_ = (
4,
Weapons.AIR_2A_Genie_Nuclear_air_to_air_unguided_rocket_,
)
# ERRR <CLEAN>
class Pylon5:
Weapons.AIM_4D_Rear_aspect_advanced_heat_seeking_air_to_air_missile_ = (
5,
Weapons.AIM_4D_Rear_aspect_advanced_heat_seeking_air_to_air_missile_,
)
Weapons.AIM_4F_Semi_active_radar_homing_air_to_air_missile_ = (
5,
Weapons.AIM_4F_Semi_active_radar_homing_air_to_air_missile_,
)
Weapons.AIM_4G_Rear_aspect_heat_seeking_air_to_air_missile_ = (
5,
Weapons.AIM_4G_Rear_aspect_heat_seeking_air_to_air_missile_,
)
class Pylon6:
Weapons.AIM_4D_Rear_aspect_advanced_heat_seeking_air_to_air_missile_ = (
6,
Weapons.AIM_4D_Rear_aspect_advanced_heat_seeking_air_to_air_missile_,
)
Weapons.AIM_4F_Semi_active_radar_homing_air_to_air_missile_ = (
6,
Weapons.AIM_4F_Semi_active_radar_homing_air_to_air_missile_,
)
Weapons.AIM_4G_Rear_aspect_heat_seeking_air_to_air_missile_ = (
6,
Weapons.AIM_4G_Rear_aspect_heat_seeking_air_to_air_missile_,
)
class Pylon7:
Smokewinder___red = (7, Weapons.Smokewinder___red)
Smokewinder___green = (7, Weapons.Smokewinder___green)
Smokewinder___blue = (7, Weapons.Smokewinder___blue)
Smokewinder___white = (7, Weapons.Smokewinder___white)
Smokewinder___yellow = (7, Weapons.Smokewinder___yellow)
Fuel_Tank_ = (7, Weapons.Fuel_Tank_)
# ERRR <CLEAN>
class Pylon8:
Weapons.L005_Sorbtsiya_ECM_pod__left_ = (
8,
Weapons.L005_Sorbtsiya_ECM_pod__left_,
)
class Pylon9:
Smoke_Generator___red_ = (9, Weapons.Smoke_Generator___red_)
Smoke_Generator___green_ = (9, Weapons.Smoke_Generator___green_)
Smoke_Generator___blue_ = (9, Weapons.Smoke_Generator___blue_)
Smoke_Generator___white_ = (9, Weapons.Smoke_Generator___white_)
Smoke_Generator___yellow_ = (9, Weapons.Smoke_Generator___yellow_)
Smoke_Generator___orange_ = (9, Weapons.Smoke_Generator___orange_)
pylons: Set[int] = {1, 2, 3, 4, 5, 6, 7, 8, 9}
tasks = [
task.CAP,
task.Escort,
task.FighterSweep,
task.Intercept,
task.Reconnaissance,
]
task_default = task.FighterSweep

View File

@ -103,6 +103,7 @@ class NewGameWizard(QtWidgets.QWizard):
f100_supersabre=self.field("f100_supersabre"),
f104_starfighter=self.field("f104_starfighter"),
f105_thunderchief=self.field("f105_thunderchief"),
f106_deltadart=self.field("f106_deltadart"),
hercules=self.field("hercules"),
irondome=self.field("irondome"),
uh_60l=self.field("uh_60l"),

View File

@ -122,6 +122,8 @@ class GeneratorOptions(QtWidgets.QWizardPage):
self.registerField("f104_starfighter", self.f104_starfighter)
self.f105_thunderchief = QtWidgets.QCheckBox()
self.registerField("f105_thunderchief", self.f105_thunderchief)
self.f106_deltadart = QtWidgets.QCheckBox()
self.registerField("f106_deltadart", self.f106_deltadart)
self.jas39_gripen = QtWidgets.QCheckBox()
self.registerField("jas39_gripen", self.jas39_gripen)
self.super_etendard = QtWidgets.QCheckBox()
@ -161,6 +163,7 @@ class GeneratorOptions(QtWidgets.QWizardPage):
("F-100 Super Sabre (v2.7.18.30765 patch 20.10.22)", self.f100_supersabre),
("F-104 Starfighter (v2.7.11.222.01)", self.f104_starfighter),
("F-105 Thunderchief (v2.7.12.23x)", self.f105_thunderchief),
("F-106 Delta Dart (v2.9.4.101)", self.f106_deltadart),
("F-15D Baz (v1.0)", self.f15d_baz),
("F-15I Ra'am (v1.0 by IDF Mods Project)", self.f_15_idf),
("F-16I Sufa & F-16D (v3.6 by IDF Mods Project)", self.f_16_idf),
@ -234,6 +237,7 @@ class GeneratorOptions(QtWidgets.QWizardPage):
self.f100_supersabre.setChecked(s.get("f100_supersabre", False))
self.f104_starfighter.setChecked(s.get("f104_starfighter", False))
self.f105_thunderchief.setChecked(s.get("f105_thunderchief", False))
self.f106_deltadart.setChecked(s.get("f106_deltadart", 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))

View File

@ -0,0 +1,45 @@
local unitPayloads = {
["name"] = "VSN_F106A",
["payloads"] = {
[1] = {
["name"] = "CAP",
["pylons"] = {
[1] = {
["CLSID"] = "{44EE8698-89F9-48EE-AF36-5FD31896A82F}",
["num"] = 8,
},
[2] = {
["CLSID"] = "{VSN_F106R_PTB}",
["num"] = 7,
},
[3] = {
["CLSID"] = "{VSN_F106L_PTB}",
["num"] = 1,
},
[4] = {
["CLSID"] = "{Hughes AIM-4G}",
["num"] = 3,
},
[5] = {
["CLSID"] = "{Hughes AIM-4G}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{Hughes AIM-4F}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{Hughes AIM-4F}",
["num"] = 2,
},
},
["tasks"] = {
[1] = 19,
},
},
},
["tasks"] = {
},
["unitType"] = "VSN_F106A",
}
return unitPayloads

View File

@ -0,0 +1,45 @@
local unitPayloads = {
["name"] = "VSN_F106B",
["payloads"] = {
[1] = {
["name"] = "CAP",
["pylons"] = {
[1] = {
["CLSID"] = "{44EE8698-89F9-48EE-AF36-5FD31896A82F}",
["num"] = 8,
},
[2] = {
["CLSID"] = "{VSN_F106R_PTB}",
["num"] = 7,
},
[3] = {
["CLSID"] = "{VSN_F106L_PTB}",
["num"] = 1,
},
[4] = {
["CLSID"] = "{Hughes AIM-4F}",
["num"] = 6,
},
[5] = {
["CLSID"] = "{Hughes AIM-4G}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{Hughes AIM-4G}",
["num"] = 3,
},
[7] = {
["CLSID"] = "{Hughes AIM-4F}",
["num"] = 2,
},
},
["tasks"] = {
[1] = 19,
},
},
},
["tasks"] = {
},
["unitType"] = "VSN_F106B",
}
return unitPayloads

View File

@ -13,6 +13,8 @@
"F-86F Sabre",
"F-100 Super Sabre",
"F-104C Starfighter",
"F-106A Delta Dart",
"F-106B Delta Dart",
"P-51D-25-NA Mustang",
"P-51D-30-NA Mustang",
"F-105D Thunderchief",

View File

@ -19,6 +19,8 @@
"F-104C Starfighter",
"F-105D Thunderchief",
"F-105G Thunderchief",
"F-106A Delta Dart",
"F-106B Delta Dart",
"UH-1H Iroquois"
],
"awacs": [

View File

@ -21,6 +21,8 @@
"F-5E Tiger II",
"F-100 Super Sabre",
"F-105G Thunderchief",
"F-106A Delta Dart",
"F-106B Delta Dart",
"S-3B Viking",
"OV-10A Bronco",
"UH-1H Iroquois"

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@ -0,0 +1,21 @@
description:
"The Convair F-106 Delta Dart is a supersonic interceptor that served with \
\ the United States Air Force from 1959 to 1988. Capable of Mach 2.3 it was \
\ envisioned as the ultimate interceptor. The F-106 was designed without a \
\ gun or provision for carrying bombs, instead carrying its AIM-4 Falcon \
\ air-to-air missiles within an internal weapons bay, its clean exterior was \
\ beneficial to supersonic flight."
introduced: 1959
manufacturer: Convair
origin: USA
price: 9
role: Interceptor
max_range: 250
gunfighter: false
variants:
F-106A Delta Dart: {}
tasks:
BARCAP: 250
Escort: 150
Fighter sweep: 200
Intercept: 300

View File

@ -0,0 +1,21 @@
description:
"The Convair F-106 Delta Dart is a supersonic interceptor that served with \
\ the United States Air Force from 1959 to 1988. Capable of Mach 2.3 it was \
\ envisioned as the ultimate interceptor. The F-106 was designed without a \
\ gun or provision for carrying bombs, instead carrying its AIM-4 Falcon \
\ air-to-air missiles within an internal weapons bay, its clean exterior was \
\ beneficial to supersonic flight."
introduced: 1959
manufacturer: Convair
origin: USA
price: 9
role: Interceptor
max_range: 250
gunfighter: false
variants:
F-106B Delta Dart: {}
tasks:
BARCAP: 250
Escort: 150
Fighter sweep: 200
Intercept: 300