Add basic MiG-29 Fulcrum (full fidelity) support (#3529)

Add basic support for full fidelity MiG-29 Fulcrum.
This commit is contained in:
zhexu14 2025-10-25 10:48:33 +11:00 committed by GitHub
parent bb1d4f1b18
commit 545990b16d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
15 changed files with 309 additions and 3 deletions

View File

@ -4,7 +4,7 @@ Saves from 13.x are not compatible with 14.0.0.
## Features/Improvements ## 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. * **[Mods]** A4EC mod version updated to 2.3.
* **[UI]** Allow saving after fast forwarding manually with sim speed controls (--show-sim-speed-controls option). * **[UI]** Allow saving after fast forwarding manually with sim speed controls (--show-sim-speed-controls option).

View File

@ -38,6 +38,7 @@ from game.radio.channels import (
HindChannelNamer, HindChannelNamer,
HipChannelNamer, HipChannelNamer,
KiowaChannelNamer, KiowaChannelNamer,
FulcrumChannelNamer,
) )
from game.utils import ( from game.utils import (
Distance, Distance,
@ -118,6 +119,7 @@ class RadioConfig:
"hind": HindChannelNamer, "hind": HindChannelNamer,
"hip": HipChannelNamer, "hip": HipChannelNamer,
"kiowa": KiowaChannelNamer, "kiowa": KiowaChannelNamer,
"fulcrum": FulcrumChannelNamer,
}[config.get("namer", "default")] }[config.get("namer", "default")]

View File

@ -450,3 +450,15 @@ class KiowaChannelNamer(ChannelNamer):
@classmethod @classmethod
def name(cls) -> str: def name(cls) -> str:
return "kiowa" 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"

View File

@ -234,7 +234,6 @@ RADIOS: List[Radio] = [
# Ka-50 # Ka-50
# Note: Also capable of 100MHz-150MHz, but we can't model gaps. # 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-800L1", (RadioRange(MHz(220), MHz(400), kHz(25), Modulation.AM),)),
Radio("R-828", (RadioRange(MHz(20), MHz(60), kHz(25), Modulation.FM),)),
# UH-1H # UH-1H
Radio("AN/ARC-51BX", (RadioRange(MHz(225), MHz(400), kHz(50), Modulation.AM),)), 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),)), Radio("AN/ARC-131", (RadioRange(MHz(30), MHz(76), kHz(50), Modulation.FM),)),
@ -298,6 +297,16 @@ RADIOS: List[Radio] = [
# Mi-8/Mi-24 # Mi-8/Mi-24
Radio("R863", (RadioRange(MHz(220), MHz(400), kHz(25), Modulation.AM),)), Radio("R863", (RadioRange(MHz(220), MHz(400), kHz(25), Modulation.AM),)),
Radio("R828", (RadioRange(MHz(20), MHz(60), kHz(25), Modulation.FM),)), 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),
),
),
] ]

View File

@ -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

View File

@ -14,6 +14,7 @@ aircrafts:
- Mi-24P Hind-F - Mi-24P Hind-F
- Mi-28N Havoc - Mi-28N Havoc
- MiG-21bis Fishbed-N - MiG-21bis Fishbed-N
- MIG-29-FULCRUM
- MiG-29A Fulcrum-A - MiG-29A Fulcrum-A
- Mirage-F1EQ - Mirage-F1EQ
- Su-22M4 Fitter-K - Su-22M4 Fitter-K

View File

@ -13,6 +13,7 @@ aircrafts:
- MiG-21bis Fishbed-N - MiG-21bis Fishbed-N
- MiG-23ML Flogger-G - MiG-23ML Flogger-G
- MiG-25PD Foxbat-E - MiG-25PD Foxbat-E
- MIG-29-FULCRUM
- MiG-29A Fulcrum-A - MiG-29A Fulcrum-A
- Mirage-F1EQ - Mirage-F1EQ
- SA 342M Gazelle - SA 342M Gazelle

View File

@ -11,6 +11,7 @@ aircrafts:
- MiG-19P Farmer-B - MiG-19P Farmer-B
- MiG-21bis Fishbed-N - MiG-21bis Fishbed-N
- MiG-23MLD Flogger-K - MiG-23MLD Flogger-K
- MIG-29-FULCRUM
- MiG-29A Fulcrum-A - MiG-29A Fulcrum-A
awacs: awacs:
- A-50 - A-50

View File

@ -10,6 +10,7 @@ aircrafts:
- Mi-24V Hind-E - Mi-24V Hind-E
- Mi-24P Hind-F - Mi-24P Hind-F
- Mi-8MTV2 Hip - Mi-8MTV2 Hip
- MIG-29-FULCRUM
- MiG-29A Fulcrum-A - MiG-29A Fulcrum-A
- MiG-29G Fulcrum-A - MiG-29G Fulcrum-A
- Su-22M4 Fitter-K - Su-22M4 Fitter-K

View File

@ -13,6 +13,7 @@ aircrafts:
- MiG-21bis Fishbed-N - MiG-21bis Fishbed-N
- MiG-23MLD Flogger-K - MiG-23MLD Flogger-K
- MiG-25PD Foxbat-E - MiG-25PD Foxbat-E
- MIG-29-FULCRUM
- MiG-29A Fulcrum-A - MiG-29A Fulcrum-A
- Su-17M4 Fitter-K - Su-17M4 Fitter-K
- Su-24M Fencer-D - Su-24M Fencer-D

View File

@ -14,6 +14,7 @@ aircrafts:
- MiG-23MLD Flogger-K - MiG-23MLD Flogger-K
- MiG-25PD Foxbat-E - MiG-25PD Foxbat-E
- MiG-27K Flogger-J2 - MiG-27K Flogger-J2
- MIG-29-FULCRUM
- MiG-29A Fulcrum-A - MiG-29A Fulcrum-A
- MiG-31 Foxhound - MiG-31 Foxhound
- Su-17M4 Fitter-K - Su-17M4 Fitter-K

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -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

View File

@ -27,7 +27,8 @@ price: 15
role: Multirole Fighter role: Multirole Fighter
max_range: 150 max_range: 150
variants: variants:
MiG-29A Fulcrum-A: {} MiG-29A Fulcrum-A:
display_name: MiG-29A Fulcrum-A (FC3)
kneeboard_units: "metric" kneeboard_units: "metric"
tasks: tasks:
BAI: 530 BAI: 530