diff --git a/changelog.md b/changelog.md index 135f71f5..d0073763 100644 --- a/changelog.md +++ b/changelog.md @@ -4,7 +4,7 @@ Saves from 13.x are not compatible with 14.0.0. ## Features/Improvements -* **[Engine]** Support for DCS 2.9.19.13478 +* **[Engine]** Support for DCS 2.9.20 including MiG-29 Fulcrum (full fidelity version). * **[Mods]** A4EC mod version updated to 2.3. * **[UI]** Allow saving after fast forwarding manually with sim speed controls (--show-sim-speed-controls option). diff --git a/game/dcs/aircrafttype.py b/game/dcs/aircrafttype.py index eecc0505..e07fba5f 100644 --- a/game/dcs/aircrafttype.py +++ b/game/dcs/aircrafttype.py @@ -38,6 +38,7 @@ from game.radio.channels import ( HindChannelNamer, HipChannelNamer, KiowaChannelNamer, + FulcrumChannelNamer, ) from game.utils import ( Distance, @@ -118,6 +119,7 @@ class RadioConfig: "hind": HindChannelNamer, "hip": HipChannelNamer, "kiowa": KiowaChannelNamer, + "fulcrum": FulcrumChannelNamer, }[config.get("namer", "default")] diff --git a/game/radio/channels.py b/game/radio/channels.py index 170d2691..e7e85586 100644 --- a/game/radio/channels.py +++ b/game/radio/channels.py @@ -450,3 +450,15 @@ class KiowaChannelNamer(ChannelNamer): @classmethod def name(cls) -> str: return "kiowa" + + +class FulcrumChannelNamer(ChannelNamer): + """Channel namer for MiG-29A Fulcrum""" + + @staticmethod + def channel_name(radio_id: int, channel_id: int) -> str: + return f"R862 Ch {channel_id}" + + @classmethod + def name(cls) -> str: + return "fulcrum" diff --git a/game/radio/radios.py b/game/radio/radios.py index 57273595..b3355d46 100644 --- a/game/radio/radios.py +++ b/game/radio/radios.py @@ -234,7 +234,6 @@ RADIOS: List[Radio] = [ # Ka-50 # Note: Also capable of 100MHz-150MHz, but we can't model gaps. Radio("R-800L1", (RadioRange(MHz(220), MHz(400), kHz(25), Modulation.AM),)), - Radio("R-828", (RadioRange(MHz(20), MHz(60), kHz(25), Modulation.FM),)), # UH-1H Radio("AN/ARC-51BX", (RadioRange(MHz(225), MHz(400), kHz(50), Modulation.AM),)), Radio("AN/ARC-131", (RadioRange(MHz(30), MHz(76), kHz(50), Modulation.FM),)), @@ -298,6 +297,16 @@ RADIOS: List[Radio] = [ # Mi-8/Mi-24 Radio("R863", (RadioRange(MHz(220), MHz(400), kHz(25), Modulation.AM),)), Radio("R828", (RadioRange(MHz(20), MHz(60), kHz(25), Modulation.FM),)), + # MiG-29A + Radio( + "R862", + ( + RadioRange(MHz(220), MHz(400), kHz(25), Modulation.AM), + RadioRange(MHz(100), MHz(150), kHz(25), Modulation.AM), + RadioRange(MHz(220), MHz(400), kHz(25), Modulation.FM), + RadioRange(MHz(100), MHz(150), kHz(25), Modulation.FM), + ), + ), ] diff --git a/resources/customized_payloads/MiG-29 Fulcrum.lua b/resources/customized_payloads/MiG-29 Fulcrum.lua new file mode 100644 index 00000000..9076d0d8 --- /dev/null +++ b/resources/customized_payloads/MiG-29 Fulcrum.lua @@ -0,0 +1,224 @@ +local unitPayloads = { + ["name"] = "MiG-29A", + ["payloads"] = { + [1] = { + ["name"] = "CAS", + ["pylons"] = { + [1] = { + ["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}", + ["num"] = 7, + }, + [2] = { + ["CLSID"] = "B-8M1 - 20 S-8OFP2", + ["num"] = 5, + }, + [3] = { + ["CLSID"] = "B-8M1 - 20 S-8OFP2", + ["num"] = 6, + }, + [4] = { + ["CLSID"] = "B-8M1 - 20 S-8OFP2", + ["num"] = 3, + }, + [5] = { + ["CLSID"] = "B-8M1 - 20 S-8OFP2", + ["num"] = 2, + }, + [6] = { + ["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}", + ["num"] = 1, + }, + [7] = { + ["CLSID"] = "{PTB_1500_MIG29A}", + ["num"] = 4, + }, + }, + ["tasks"] = { + [1] = 30, + }, + }, + [2] = { + ["name"] = "STRIKE", + ["pylons"] = { + [1] = { + ["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}", + ["num"] = 1, + }, + [2] = { + ["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}", + ["num"] = 2, + }, + [3] = { + ["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}", + ["num"] = 3, + }, + [4] = { + ["CLSID"] = "{PTB_1500_MIG29A}", + ["num"] = 4, + }, + [5] = { + ["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}", + ["num"] = 5, + }, + [6] = { + ["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}", + ["num"] = 6, + }, + [7] = { + ["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}", + ["num"] = 7, + }, + }, + ["tasks"] = { + [1] = 32, + }, + }, + [3] = { + ["name"] = "CAP", + ["pylons"] = { + [1] = { + ["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}", + ["num"] = 1, + }, + [2] = { + ["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}", + ["num"] = 2, + }, + [3] = { + ["CLSID"] = "{9B25D316-0434-4954-868F-D51DB1A38DF0}", + ["num"] = 3, + }, + [4] = { + ["CLSID"] = "{9B25D316-0434-4954-868F-D51DB1A38DF0}", + ["num"] = 5, + }, + [5] = { + ["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}", + ["num"] = 6, + }, + [6] = { + ["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}", + ["num"] = 7, + }, + [7] = { + ["CLSID"] = "{PTB_1500_MIG29A}", + ["num"] = 4, + }, + }, + ["tasks"] = { + [1] = 10, + }, + }, + [4] = { + ["name"] = "ANTISHIP", + ["pylons"] = { + [1] = { + ["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}", + ["num"] = 7, + }, + [2] = { + ["CLSID"] = "{3858707D-F5D5-4bbb-BDD8-ABB0530EBC7C}", + ["num"] = 5, + }, + [3] = { + ["CLSID"] = "{3858707D-F5D5-4bbb-BDD8-ABB0530EBC7C}", + ["num"] = 6, + }, + [4] = { + ["CLSID"] = "{3858707D-F5D5-4bbb-BDD8-ABB0530EBC7C}", + ["num"] = 3, + }, + [5] = { + ["CLSID"] = "{3858707D-F5D5-4bbb-BDD8-ABB0530EBC7C}", + ["num"] = 2, + }, + [6] = { + ["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}", + ["num"] = 1, + }, + [7] = { + ["CLSID"] = "{PTB_1500_MIG29A}", + ["num"] = 4, + }, + }, + ["tasks"] = { + [1] = 30, + }, + }, + [5] = { + ["name"] = "SEAD", + ["pylons"] = { + [1] = { + ["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}", + ["num"] = 7, + }, + [2] = { + ["CLSID"] = "{3858707D-F5D5-4bbb-BDD8-ABB0530EBC7C}", + ["num"] = 5, + }, + [3] = { + ["CLSID"] = "{3858707D-F5D5-4bbb-BDD8-ABB0530EBC7C}", + ["num"] = 6, + }, + [4] = { + ["CLSID"] = "{3858707D-F5D5-4bbb-BDD8-ABB0530EBC7C}", + ["num"] = 3, + }, + [5] = { + ["CLSID"] = "{3858707D-F5D5-4bbb-BDD8-ABB0530EBC7C}", + ["num"] = 2, + }, + [6] = { + ["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}", + ["num"] = 1, + }, + [7] = { + ["CLSID"] = "{PTB_1500_MIG29A}", + ["num"] = 4, + }, + }, + ["tasks"] = { + [1] = 30, + }, + }, + [6] = { + ["displayName"] = "OCA/Runway", + ["name"] = "OCA/Runway", + ["pylons"] = { + [1] = { + ["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}", + ["num"] = 1, + }, + [2] = { + ["CLSID"] = "{BD289E34-DF84-4C5E-9220-4B14C346E79D}", + ["num"] = 2, + }, + [3] = { + ["CLSID"] = "{BD289E34-DF84-4C5E-9220-4B14C346E79D}", + ["num"] = 3, + }, + [4] = { + ["CLSID"] = "{PTB_1500_MIG29A}", + ["num"] = 4, + }, + [5] = { + ["CLSID"] = "{BD289E34-DF84-4C5E-9220-4B14C346E79D}", + ["num"] = 5, + }, + [6] = { + ["CLSID"] = "{BD289E34-DF84-4C5E-9220-4B14C346E79D}", + ["num"] = 6, + }, + [7] = { + ["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}", + ["num"] = 7, + }, + }, + ["tasks"] = { + [1] = 34, + }, + }, + }, + ["unitType"] = "MiG-29 Fulcrum", +} +return unitPayloads \ No newline at end of file diff --git a/resources/factions/iran_2015.yaml b/resources/factions/iran_2015.yaml index 9f897625..eb1d4577 100644 --- a/resources/factions/iran_2015.yaml +++ b/resources/factions/iran_2015.yaml @@ -14,6 +14,7 @@ aircrafts: - Mi-24P Hind-F - Mi-28N Havoc - MiG-21bis Fishbed-N + - MIG-29-FULCRUM - MiG-29A Fulcrum-A - Mirage-F1EQ - Su-22M4 Fitter-K diff --git a/resources/factions/iraq_1991.yaml b/resources/factions/iraq_1991.yaml index 0a14a51c..4cd76a4a 100644 --- a/resources/factions/iraq_1991.yaml +++ b/resources/factions/iraq_1991.yaml @@ -13,6 +13,7 @@ aircrafts: - MiG-21bis Fishbed-N - MiG-23ML Flogger-G - MiG-25PD Foxbat-E + - MIG-29-FULCRUM - MiG-29A Fulcrum-A - Mirage-F1EQ - SA 342M Gazelle diff --git a/resources/factions/north_korea_2000.yaml b/resources/factions/north_korea_2000.yaml index da034f38..7fcb5a75 100644 --- a/resources/factions/north_korea_2000.yaml +++ b/resources/factions/north_korea_2000.yaml @@ -11,6 +11,7 @@ aircrafts: - MiG-19P Farmer-B - MiG-21bis Fishbed-N - MiG-23MLD Flogger-K + - MIG-29-FULCRUM - MiG-29A Fulcrum-A awacs: - A-50 diff --git a/resources/factions/poland_2010.yaml b/resources/factions/poland_2010.yaml index 0189ceea..c0af90cc 100644 --- a/resources/factions/poland_2010.yaml +++ b/resources/factions/poland_2010.yaml @@ -10,6 +10,7 @@ aircrafts: - Mi-24V Hind-E - Mi-24P Hind-F - Mi-8MTV2 Hip + - MIG-29-FULCRUM - MiG-29A Fulcrum-A - MiG-29G Fulcrum-A - Su-22M4 Fitter-K diff --git a/resources/factions/russia_1975.yaml b/resources/factions/russia_1975.yaml index e7effc4f..ad340dcd 100644 --- a/resources/factions/russia_1975.yaml +++ b/resources/factions/russia_1975.yaml @@ -13,6 +13,7 @@ aircrafts: - MiG-21bis Fishbed-N - MiG-23MLD Flogger-K - MiG-25PD Foxbat-E + - MIG-29-FULCRUM - MiG-29A Fulcrum-A - Su-17M4 Fitter-K - Su-24M Fencer-D diff --git a/resources/factions/russia_1980.yaml b/resources/factions/russia_1980.yaml index cb786a16..b77897cd 100644 --- a/resources/factions/russia_1980.yaml +++ b/resources/factions/russia_1980.yaml @@ -14,6 +14,7 @@ aircrafts: - MiG-23MLD Flogger-K - MiG-25PD Foxbat-E - MiG-27K Flogger-J2 + - MIG-29-FULCRUM - MiG-29A Fulcrum-A - MiG-31 Foxhound - Su-17M4 Fitter-K diff --git a/resources/ui/units/aircrafts/banners/MiG-29 Fulcrum.jpg b/resources/ui/units/aircrafts/banners/MiG-29 Fulcrum.jpg new file mode 100644 index 00000000..bac81243 Binary files /dev/null and b/resources/ui/units/aircrafts/banners/MiG-29 Fulcrum.jpg differ diff --git a/resources/ui/units/aircrafts/icons/MiG-29 Fulcrum_24.jpg b/resources/ui/units/aircrafts/icons/MiG-29 Fulcrum_24.jpg new file mode 100644 index 00000000..2ad3e728 Binary files /dev/null and b/resources/ui/units/aircrafts/icons/MiG-29 Fulcrum_24.jpg differ diff --git a/resources/units/aircraft/MiG-29 Fulcrum.yaml b/resources/units/aircraft/MiG-29 Fulcrum.yaml new file mode 100644 index 00000000..6dda5e90 --- /dev/null +++ b/resources/units/aircraft/MiG-29 Fulcrum.yaml @@ -0,0 +1,52 @@ +description: + 'The MiG-29 "Fulcrum" is a Russian-designed, twin-engine, supersonic + fighter. First operational in the early 1980s, the Fulcrum is a "light weight" fighter, + comparable to the American F/A-18 Hornet and F-16. Designed to work in conjunction + with the larger Su-27 Flanker, the MiG-29 is armed with an internal 30mm cannon + and both infrared and radar guided air-to-air missiles. For air-to-ground tasks, + the MiG-29 can be armed with a large array of unguided bombs and rockets. + + + In addition to a sophisticated pulse doppler radar, the MiG-29 is also equipped + with a passive Infrared Search and Track (IRST) sensor that allows the Fulcrum to + detect and target enemy aircraft just based on target infrared emissions. This allows + the MiG-29 to make stealthy attacks with no warning! + + + The Fulcrum is a highly-maneuverable fighter in a dogfight, and when paired with + the helmet mounted sight and the AA-11 "Archer" air-to-air missile, it is a very + lethal adversary. + + + The MiG-29 has also been widely exported and has served in many countries that include + Germany, Iran, Ukraine, and Poland.' +introduced: 1983 +manufacturer: Mikoyan +origin: USSR/Russia +price: 15 +role: Multirole Fighter +max_range: 150 +variants: + MIG-29-FULCRUM: + display_name: MiG-29A Fulcrum-A +kneeboard_units: "metric" +radios: + intra_flight: R862 + inter_flight: R862 + channels: + type: common + namer: fulcrum + intra_flight_radio_index: 1 + inter_flight_radio_index: 1 +tasks: + BAI: 530 + BARCAP: 370 + CAS: 530 + Escort: 370 + Fighter sweep: 370 + Intercept: 370 + OCA/Aircraft: 530 + OCA/Runway: 410 + Strike: 410 + TARCAP: 370 +hit_points: 16 diff --git a/resources/units/aircraft/MiG-29A.yaml b/resources/units/aircraft/MiG-29A.yaml index a42168c3..08a381e4 100644 --- a/resources/units/aircraft/MiG-29A.yaml +++ b/resources/units/aircraft/MiG-29A.yaml @@ -27,7 +27,8 @@ price: 15 role: Multirole Fighter max_range: 150 variants: - MiG-29A Fulcrum-A: {} + MiG-29A Fulcrum-A: + display_name: MiG-29A Fulcrum-A (FC3) kneeboard_units: "metric" tasks: BAI: 530