From 3086f64e9885f03850286744759a1efb035a2de9 Mon Sep 17 00:00:00 2001 From: Raffson Date: Sun, 6 Jul 2025 21:58:30 +0200 Subject: [PATCH] F4U-1D support except banner & payloads --- game/dcs/aircrafttype.py | 4 ++ game/radio/channels.py | 38 +++++++++++++++++ game/radio/radios.py | 9 ++++ resources/factions/allies_1944.json | 1 + .../ui/units/aircrafts/icons/F4U-1D_24.jpg | Bin 0 -> 2693 bytes resources/units/aircraft/F4U-1D.yaml | 39 ++++++++++++++++++ 6 files changed, 91 insertions(+) create mode 100644 resources/ui/units/aircrafts/icons/F4U-1D_24.jpg create mode 100644 resources/units/aircraft/F4U-1D.yaml diff --git a/game/dcs/aircrafttype.py b/game/dcs/aircrafttype.py index feb52f14..00c8da78 100644 --- a/game/dcs/aircrafttype.py +++ b/game/dcs/aircrafttype.py @@ -41,6 +41,8 @@ from game.radio.channels import ( WarthogChannelNamer, PhantomChannelNamer, KiowaChannelNamer, + ARC5RadioChannelAllocator, + ARC5ChannelNamer, ) from game.utils import ( Distance, @@ -94,6 +96,7 @@ class RadioConfig: return None allocator_type: Type[RadioChannelAllocator] = { "SCR-522": SCR522RadioChannelAllocator, + "ARC-5": ARC5RadioChannelAllocator, "common": CommonRadioChannelAllocator, "farmer": FarmerRadioChannelAllocator, "noop": NoOpChannelAllocator, @@ -105,6 +108,7 @@ class RadioConfig: def make_namer(cls, config: dict[str, Any]) -> Type[ChannelNamer]: return { "SCR-522": SCR522ChannelNamer, + "ARC-5": ARC5ChannelNamer, "default": ChannelNamer, "huey": HueyChannelNamer, "mirage": MirageChannelNamer, diff --git a/game/radio/channels.py b/game/radio/channels.py index 6d6e81c8..5cb2389b 100644 --- a/game/radio/channels.py +++ b/game/radio/channels.py @@ -219,6 +219,27 @@ class SCR522RadioChannelAllocator(RadioChannelAllocator): return "SCR-522" +@dataclass(frozen=True) +class ARC5RadioChannelAllocator(RadioChannelAllocator): + """Preset channel allocator for the ARC-5 WW2 radios. (4 channels)""" + + def assign_channels_for_flight( + self, flight: FlightData, mission_data: MissionData + ) -> None: + radio_id = 1 + flight.assign_channel(radio_id, 1, flight.intra_flight_channel) + if flight.departure.atc is not None: + flight.assign_channel(radio_id, 2, flight.departure.atc) + if flight.arrival.atc is not None: + flight.assign_channel(radio_id, 3, flight.arrival.atc) + + # TODO : Some GCI on Channel 4 ? + + @classmethod + def name(cls) -> str: + return "ARC-5" + + class ChannelNamer: """Base class allowing channel name customization per-aircraft. @@ -376,6 +397,23 @@ class SCR522ChannelNamer(ChannelNamer): return "SCR-522" +class ARC5ChannelNamer(ChannelNamer): + """ + Channel namer for F4U-1D Corsair + """ + + @staticmethod + def channel_name(radio_id: int, channel_id: int) -> str: + if channel_id > 3: + return "?" + else: + return f"Channel " + "1234"[channel_id - 1] + + @classmethod + def name(cls) -> str: + return "ARC-5" + + class LegacyWarthogChannelNamer(ChannelNamer): """Channel namer for the legacy A-10C.""" diff --git a/game/radio/radios.py b/game/radio/radios.py index 4722a2fe..daf893c7 100644 --- a/game/radio/radios.py +++ b/game/radio/radios.py @@ -231,6 +231,15 @@ RADIOS: List[Radio] = [ # P-51 / P-47 Radio # 4 preset channels (A/B/C/D) Radio("SCR522", (RadioRange(MHz(100), MHz(156), kHz(25), Modulation.AM),)), + # F4U-1D Radio + # 4 preset channels (1/2/3/4) + Radio( + "ARC-5", + ( + RadioRange(MHz(100), MHz(150), kHz(25), Modulation.AM), + RadioRange(MHz(220), MHz(390), kHz(25), Modulation.AM), + ), + ), # JF-17 Radios should use AM Radio("R&S M3AR VHF", (RadioRange(MHz(120), MHz(174), kHz(25), Modulation.AM),)), Radio("R&S M3AR UHF", (RadioRange(MHz(225), MHz(400), kHz(25), Modulation.AM),)), diff --git a/resources/factions/allies_1944.json b/resources/factions/allies_1944.json index 8cfab752..140d57a7 100644 --- a/resources/factions/allies_1944.json +++ b/resources/factions/allies_1944.json @@ -7,6 +7,7 @@ "A-20G Havoc", "B-17G Flying Fortress", "C-47 Skytrain", + "F4U-1D Corsair", "P-47D-30 Thunderbolt (Early)", "P-47D-30 Thunderbolt (Late)", "P-47D-40 Thunderbolt", diff --git a/resources/ui/units/aircrafts/icons/F4U-1D_24.jpg b/resources/ui/units/aircrafts/icons/F4U-1D_24.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ea49a544649c173c837599ed727b330ec7f85cb7 GIT binary patch literal 2693 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