From 011d8a4e122cf9cc107fd7ba91104f4621338747 Mon Sep 17 00:00:00 2001 From: Dan Albert Date: Fri, 11 Feb 2022 01:35:03 -0800 Subject: [PATCH] Export airfield data to yaml, switch to ID keys. This exports all the old AIRFIELD_DATA to yaml files. It's easier for users to send fixes if it's defined this way, and they can also fix it in their install without having to wait for a new release. This also switches the indexes from the unstable DCS airfield names to airfield IDs, so this fixes another case of DCS updates occasionally breaking Liberation. I also ended up finding quite a few typos in airfield names, and incorrect theater names in the process. Those have been fixed. --- .../aircraft/flightgroupconfigurator.py | 6 +- game/missiongenerator/missiongenerator.py | 18 +- game/radio/radios.py | 31 +- game/radio/tacan.py | 13 + game/theater/controlpoint.py | 49 +- gen/airfields.py | 1610 ++--------------- gen/runways.py | 36 +- .../airfields/Caucasus/anapa_vityazevo.yaml | 26 + resources/airfields/Caucasus/batumi.yaml | 19 + resources/airfields/Caucasus/beslan.yaml | 22 + resources/airfields/Caucasus/gelendzhik.yaml | 14 + resources/airfields/Caucasus/gudauta.yaml | 11 + resources/airfields/Caucasus/kobuleti.yaml | 25 + .../airfields/Caucasus/krasnodar_center.yaml | 32 + .../Caucasus/krasnodar_pashkovsky.yaml | 29 + resources/airfields/Caucasus/krymsk.yaml | 35 + resources/airfields/Caucasus/kutaisi.yaml | 19 + .../airfields/Caucasus/maykop_khanskaya.yaml | 33 + .../airfields/Caucasus/mineralnye_vody.yaml | 35 + resources/airfields/Caucasus/mozdok.yaml | 35 + resources/airfields/Caucasus/nalchik.yaml | 22 + .../airfields/Caucasus/novorossiysk.yaml | 11 + .../airfields/Caucasus/senaki_kolkhi.yaml | 25 + resources/airfields/Caucasus/sochi_adler.yaml | 16 + resources/airfields/Caucasus/soganlug.yaml | 14 + .../airfields/Caucasus/sukhumi_babushara.yaml | 19 + .../airfields/Caucasus/tbilisi_lochini.yaml | 35 + resources/airfields/Caucasus/vaziani.yaml | 23 + .../MarianaIslands/andersen_afb.yaml | 14 + .../antonio_b__won_pat_intl.yaml | 16 + .../airfields/MarianaIslands/rota_intl.yaml | 11 + .../airfields/MarianaIslands/saipan_intl.yaml | 16 + .../airfields/MarianaIslands/tinian_intl.yaml | 11 + resources/airfields/Nevada/beatty.yaml | 6 + resources/airfields/Nevada/boulder_city.yaml | 6 + resources/airfields/Nevada/creech.yaml | 19 + resources/airfields/Nevada/echo_bay.yaml | 14 + resources/airfields/Nevada/groom_lake.yaml | 19 + .../airfields/Nevada/henderson_executive.yaml | 11 + resources/airfields/Nevada/jean.yaml | 5 + resources/airfields/Nevada/laughlin.yaml | 11 + .../airfields/Nevada/lincoln_county.yaml | 5 + .../Nevada/mccarran_international.yaml | 19 + resources/airfields/Nevada/mesquite.yaml | 6 + resources/airfields/Nevada/mina.yaml | 5 + resources/airfields/Nevada/nellis.yaml | 19 + .../airfields/Nevada/north_las_vegas.yaml | 11 + resources/airfields/Nevada/pahute_mesa.yaml | 5 + resources/airfields/Nevada/tonopah.yaml | 6 + .../airfields/Nevada/tonopah_test_range.yaml | 23 + resources/airfields/Normandy/argentan.yaml | 10 + resources/airfields/Normandy/azeville.yaml | 11 + resources/airfields/Normandy/barville.yaml | 10 + resources/airfields/Normandy/bazenville.yaml | 11 + .../airfields/Normandy/beny_sur_mer.yaml | 11 + resources/airfields/Normandy/beuzeville.yaml | 11 + resources/airfields/Normandy/biniville.yaml | 11 + resources/airfields/Normandy/brucheville.yaml | 11 + resources/airfields/Normandy/cardonville.yaml | 11 + resources/airfields/Normandy/carpiquet.yaml | 11 + resources/airfields/Normandy/chailey.yaml | 10 + resources/airfields/Normandy/chippelle.yaml | 11 + resources/airfields/Normandy/conches.yaml | 10 + resources/airfields/Normandy/cretteville.yaml | 11 + .../Normandy/cricqueville_en_bessin.yaml | 11 + .../airfields/Normandy/deux_jumeaux.yaml | 11 + resources/airfields/Normandy/essay.yaml | 10 + resources/airfields/Normandy/evreux.yaml | 10 + resources/airfields/Normandy/ford_ab.yaml | 10 + resources/airfields/Normandy/funtington.yaml | 10 + resources/airfields/Normandy/goulet.yaml | 10 + resources/airfields/Normandy/hauterive.yaml | 10 + resources/airfields/Normandy/lantheuil.yaml | 11 + resources/airfields/Normandy/le_molay.yaml | 11 + resources/airfields/Normandy/lessay.yaml | 11 + resources/airfields/Normandy/lignerolles.yaml | 11 + .../airfields/Normandy/longues_sur_mer.yaml | 11 + resources/airfields/Normandy/maupertus.yaml | 11 + resources/airfields/Normandy/meautis.yaml | 11 + .../airfields/Normandy/needs_oar_point.yaml | 10 + resources/airfields/Normandy/picauville.yaml | 11 + resources/airfields/Normandy/rucqueville.yaml | 11 + .../Normandy/saint_pierre_du_mont.yaml | 11 + .../Normandy/sainte_croix_sur_mer.yaml | 11 + .../Normandy/sainte_laurent_sur_mer.yaml | 11 + resources/airfields/Normandy/sommervieu.yaml | 11 + resources/airfields/Normandy/tangmere.yaml | 10 + resources/airfields/Normandy/vrigny.yaml | 10 + .../airfields/PersianGulf/abu_dhabi_intl.yaml | 14 + .../PersianGulf/abu_musa_island.yaml | 11 + .../airfields/PersianGulf/al_ain_intl.yaml | 14 + .../airfields/PersianGulf/al_bateen.yaml | 14 + .../airfields/PersianGulf/al_dhafra_afb.yaml | 26 + .../PersianGulf/al_maktoum_intl.yaml | 20 + .../airfields/PersianGulf/al_minhad_afb.yaml | 23 + .../PersianGulf/bandar_abbas_intl.yaml | 22 + .../airfields/PersianGulf/bandar_e_jask.yaml | 14 + .../airfields/PersianGulf/bandar_lengeh.yaml | 14 + .../airfields/PersianGulf/dubai_intl.yaml | 20 + .../airfields/PersianGulf/fujairah_intl.yaml | 19 + .../airfields/PersianGulf/havadarya.yaml | 19 + resources/airfields/PersianGulf/jiroft.yaml | 11 + resources/airfields/PersianGulf/kerman.yaml | 17 + resources/airfields/PersianGulf/khasab.yaml | 16 + .../airfields/PersianGulf/kish_intl.yaml | 14 + resources/airfields/PersianGulf/lar.yaml | 14 + .../airfields/PersianGulf/lavan_island.yaml | 14 + resources/airfields/PersianGulf/liwa_afb.yaml | 17 + .../airfields/PersianGulf/qeshm_island.yaml | 14 + .../PersianGulf/ras_al_khaimah_intl.yaml | 14 + .../airfields/PersianGulf/sas_al_nakheel.yaml | 14 + .../airfields/PersianGulf/sharjah_intl.yaml | 20 + .../airfields/PersianGulf/shiraz_intl.yaml | 17 + .../airfields/PersianGulf/sir_abu_nuayr.yaml | 11 + .../airfields/PersianGulf/sirri_island.yaml | 14 + .../PersianGulf/tunb_island_afb.yaml | 6 + .../airfields/PersianGulf/tunb_kochak.yaml | 9 + resources/airfields/Syria/abu_al_duhur.yaml | 11 + .../airfields/Syria/adana_sakirpasa.yaml | 19 + resources/airfields/Syria/akrotiri.yaml | 22 + resources/airfields/Syria/al_dumayr.yaml | 11 + resources/airfields/Syria/al_qusayr.yaml | 11 + resources/airfields/Syria/aleppo.yaml | 11 + resources/airfields/Syria/an_nasiriyah.yaml | 11 + .../airfields/Syria/bassel_al_assad.yaml | 19 + .../airfields/Syria/beirut_rafic_hariri.yaml | 19 + resources/airfields/Syria/damascus.yaml | 19 + resources/airfields/Syria/ercan.yaml | 14 + resources/airfields/Syria/eyn_shemer.yaml | 11 + resources/airfields/Syria/gaziantep.yaml | 16 + resources/airfields/Syria/gazipasa.yaml | 19 + resources/airfields/Syria/gecitkale.yaml | 14 + resources/airfields/Syria/h4.yaml | 11 + resources/airfields/Syria/haifa.yaml | 11 + resources/airfields/Syria/hama.yaml | 11 + resources/airfields/Syria/hatay.yaml | 23 + resources/airfields/Syria/incirlik.yaml | 26 + resources/airfields/Syria/jirah.yaml | 11 + resources/airfields/Syria/khalkhalah.yaml | 11 + .../Syria/king_hussein_air_college.yaml | 11 + resources/airfields/Syria/kingsfield.yaml | 11 + resources/airfields/Syria/kiryat_shmona.yaml | 11 + resources/airfields/Syria/kuweires.yaml | 11 + resources/airfields/Syria/lakatamia.yaml | 11 + resources/airfields/Syria/larnaca.yaml | 19 + .../airfields/Syria/marj_as_sultan_north.yaml | 10 + .../airfields/Syria/marj_as_sultan_south.yaml | 10 + resources/airfields/Syria/marj_ruhayyil.yaml | 11 + resources/airfields/Syria/megiddo.yaml | 11 + resources/airfields/Syria/mezzeh.yaml | 11 + resources/airfields/Syria/minakh.yaml | 11 + resources/airfields/Syria/naqoura.yaml | 10 + resources/airfields/Syria/palmyra.yaml | 11 + resources/airfields/Syria/paphos.yaml | 19 + resources/airfields/Syria/pinarbashi.yaml | 11 + resources/airfields/Syria/qabr_as_sitt.yaml | 10 + resources/airfields/Syria/ramat_david.yaml | 11 + resources/airfields/Syria/rayak.yaml | 14 + resources/airfields/Syria/rene_mouawad.yaml | 11 + resources/airfields/Syria/rosh_pina.yaml | 11 + resources/airfields/Syria/sayqal.yaml | 11 + resources/airfields/Syria/shayrat.yaml | 11 + resources/airfields/Syria/tabqa.yaml | 11 + resources/airfields/Syria/taftanaz.yaml | 10 + resources/airfields/Syria/tha_lah.yaml | 11 + resources/airfields/Syria/tiyas.yaml | 11 + resources/airfields/Syria/wujah_al_hajar.yaml | 14 + .../TheChannel/abbeville_drucat.yaml | 10 + .../airfields/TheChannel/biggin_hill.yaml | 10 + resources/airfields/TheChannel/detling.yaml | 10 + .../airfields/TheChannel/dunkirk_mardyck.yaml | 10 + .../airfields/TheChannel/eastchurch.yaml | 10 + resources/airfields/TheChannel/hawkinge.yaml | 10 + resources/airfields/TheChannel/headcorn.yaml | 10 + .../airfields/TheChannel/high_halden.yaml | 10 + resources/airfields/TheChannel/lympne.yaml | 10 + resources/airfields/TheChannel/manston.yaml | 10 + .../TheChannel/merville_calonne.yaml | 10 + .../TheChannel/saint_omer_longuenesse.yaml | 10 + tests/test_radios.py | 36 + tests/test_tacan.py | 30 +- 181 files changed, 2673 insertions(+), 1547 deletions(-) create mode 100644 resources/airfields/Caucasus/anapa_vityazevo.yaml create mode 100644 resources/airfields/Caucasus/batumi.yaml create mode 100644 resources/airfields/Caucasus/beslan.yaml create mode 100644 resources/airfields/Caucasus/gelendzhik.yaml create mode 100644 resources/airfields/Caucasus/gudauta.yaml create mode 100644 resources/airfields/Caucasus/kobuleti.yaml create mode 100644 resources/airfields/Caucasus/krasnodar_center.yaml create mode 100644 resources/airfields/Caucasus/krasnodar_pashkovsky.yaml create mode 100644 resources/airfields/Caucasus/krymsk.yaml create mode 100644 resources/airfields/Caucasus/kutaisi.yaml create mode 100644 resources/airfields/Caucasus/maykop_khanskaya.yaml create mode 100644 resources/airfields/Caucasus/mineralnye_vody.yaml create mode 100644 resources/airfields/Caucasus/mozdok.yaml create mode 100644 resources/airfields/Caucasus/nalchik.yaml create mode 100644 resources/airfields/Caucasus/novorossiysk.yaml create mode 100644 resources/airfields/Caucasus/senaki_kolkhi.yaml create mode 100644 resources/airfields/Caucasus/sochi_adler.yaml create mode 100644 resources/airfields/Caucasus/soganlug.yaml create mode 100644 resources/airfields/Caucasus/sukhumi_babushara.yaml create mode 100644 resources/airfields/Caucasus/tbilisi_lochini.yaml create mode 100644 resources/airfields/Caucasus/vaziani.yaml create mode 100644 resources/airfields/MarianaIslands/andersen_afb.yaml create mode 100644 resources/airfields/MarianaIslands/antonio_b__won_pat_intl.yaml create mode 100644 resources/airfields/MarianaIslands/rota_intl.yaml create mode 100644 resources/airfields/MarianaIslands/saipan_intl.yaml create mode 100644 resources/airfields/MarianaIslands/tinian_intl.yaml create mode 100644 resources/airfields/Nevada/beatty.yaml create mode 100644 resources/airfields/Nevada/boulder_city.yaml create mode 100644 resources/airfields/Nevada/creech.yaml create mode 100644 resources/airfields/Nevada/echo_bay.yaml create mode 100644 resources/airfields/Nevada/groom_lake.yaml create mode 100644 resources/airfields/Nevada/henderson_executive.yaml create mode 100644 resources/airfields/Nevada/jean.yaml create mode 100644 resources/airfields/Nevada/laughlin.yaml create mode 100644 resources/airfields/Nevada/lincoln_county.yaml create mode 100644 resources/airfields/Nevada/mccarran_international.yaml create mode 100644 resources/airfields/Nevada/mesquite.yaml create mode 100644 resources/airfields/Nevada/mina.yaml create mode 100644 resources/airfields/Nevada/nellis.yaml create mode 100644 resources/airfields/Nevada/north_las_vegas.yaml create mode 100644 resources/airfields/Nevada/pahute_mesa.yaml create mode 100644 resources/airfields/Nevada/tonopah.yaml create mode 100644 resources/airfields/Nevada/tonopah_test_range.yaml create mode 100644 resources/airfields/Normandy/argentan.yaml create mode 100644 resources/airfields/Normandy/azeville.yaml create mode 100644 resources/airfields/Normandy/barville.yaml create mode 100644 resources/airfields/Normandy/bazenville.yaml create mode 100644 resources/airfields/Normandy/beny_sur_mer.yaml create mode 100644 resources/airfields/Normandy/beuzeville.yaml create mode 100644 resources/airfields/Normandy/biniville.yaml create mode 100644 resources/airfields/Normandy/brucheville.yaml create mode 100644 resources/airfields/Normandy/cardonville.yaml create mode 100644 resources/airfields/Normandy/carpiquet.yaml create mode 100644 resources/airfields/Normandy/chailey.yaml create mode 100644 resources/airfields/Normandy/chippelle.yaml create mode 100644 resources/airfields/Normandy/conches.yaml create mode 100644 resources/airfields/Normandy/cretteville.yaml create mode 100644 resources/airfields/Normandy/cricqueville_en_bessin.yaml create mode 100644 resources/airfields/Normandy/deux_jumeaux.yaml create mode 100644 resources/airfields/Normandy/essay.yaml create mode 100644 resources/airfields/Normandy/evreux.yaml create mode 100644 resources/airfields/Normandy/ford_ab.yaml create mode 100644 resources/airfields/Normandy/funtington.yaml create mode 100644 resources/airfields/Normandy/goulet.yaml create mode 100644 resources/airfields/Normandy/hauterive.yaml create mode 100644 resources/airfields/Normandy/lantheuil.yaml create mode 100644 resources/airfields/Normandy/le_molay.yaml create mode 100644 resources/airfields/Normandy/lessay.yaml create mode 100644 resources/airfields/Normandy/lignerolles.yaml create mode 100644 resources/airfields/Normandy/longues_sur_mer.yaml create mode 100644 resources/airfields/Normandy/maupertus.yaml create mode 100644 resources/airfields/Normandy/meautis.yaml create mode 100644 resources/airfields/Normandy/needs_oar_point.yaml create mode 100644 resources/airfields/Normandy/picauville.yaml create mode 100644 resources/airfields/Normandy/rucqueville.yaml create mode 100644 resources/airfields/Normandy/saint_pierre_du_mont.yaml create mode 100644 resources/airfields/Normandy/sainte_croix_sur_mer.yaml create mode 100644 resources/airfields/Normandy/sainte_laurent_sur_mer.yaml create mode 100644 resources/airfields/Normandy/sommervieu.yaml create mode 100644 resources/airfields/Normandy/tangmere.yaml create mode 100644 resources/airfields/Normandy/vrigny.yaml create mode 100644 resources/airfields/PersianGulf/abu_dhabi_intl.yaml create mode 100644 resources/airfields/PersianGulf/abu_musa_island.yaml create mode 100644 resources/airfields/PersianGulf/al_ain_intl.yaml create mode 100644 resources/airfields/PersianGulf/al_bateen.yaml create mode 100644 resources/airfields/PersianGulf/al_dhafra_afb.yaml create mode 100644 resources/airfields/PersianGulf/al_maktoum_intl.yaml create mode 100644 resources/airfields/PersianGulf/al_minhad_afb.yaml create mode 100644 resources/airfields/PersianGulf/bandar_abbas_intl.yaml create mode 100644 resources/airfields/PersianGulf/bandar_e_jask.yaml create mode 100644 resources/airfields/PersianGulf/bandar_lengeh.yaml create mode 100644 resources/airfields/PersianGulf/dubai_intl.yaml create mode 100644 resources/airfields/PersianGulf/fujairah_intl.yaml create mode 100644 resources/airfields/PersianGulf/havadarya.yaml create mode 100644 resources/airfields/PersianGulf/jiroft.yaml create mode 100644 resources/airfields/PersianGulf/kerman.yaml create mode 100644 resources/airfields/PersianGulf/khasab.yaml create mode 100644 resources/airfields/PersianGulf/kish_intl.yaml create mode 100644 resources/airfields/PersianGulf/lar.yaml create mode 100644 resources/airfields/PersianGulf/lavan_island.yaml create mode 100644 resources/airfields/PersianGulf/liwa_afb.yaml create mode 100644 resources/airfields/PersianGulf/qeshm_island.yaml create mode 100644 resources/airfields/PersianGulf/ras_al_khaimah_intl.yaml create mode 100644 resources/airfields/PersianGulf/sas_al_nakheel.yaml create mode 100644 resources/airfields/PersianGulf/sharjah_intl.yaml create mode 100644 resources/airfields/PersianGulf/shiraz_intl.yaml create mode 100644 resources/airfields/PersianGulf/sir_abu_nuayr.yaml create mode 100644 resources/airfields/PersianGulf/sirri_island.yaml create mode 100644 resources/airfields/PersianGulf/tunb_island_afb.yaml create mode 100644 resources/airfields/PersianGulf/tunb_kochak.yaml create mode 100644 resources/airfields/Syria/abu_al_duhur.yaml create mode 100644 resources/airfields/Syria/adana_sakirpasa.yaml create mode 100644 resources/airfields/Syria/akrotiri.yaml create mode 100644 resources/airfields/Syria/al_dumayr.yaml create mode 100644 resources/airfields/Syria/al_qusayr.yaml create mode 100644 resources/airfields/Syria/aleppo.yaml create mode 100644 resources/airfields/Syria/an_nasiriyah.yaml create mode 100644 resources/airfields/Syria/bassel_al_assad.yaml create mode 100644 resources/airfields/Syria/beirut_rafic_hariri.yaml create mode 100644 resources/airfields/Syria/damascus.yaml create mode 100644 resources/airfields/Syria/ercan.yaml create mode 100644 resources/airfields/Syria/eyn_shemer.yaml create mode 100644 resources/airfields/Syria/gaziantep.yaml create mode 100644 resources/airfields/Syria/gazipasa.yaml create mode 100644 resources/airfields/Syria/gecitkale.yaml create mode 100644 resources/airfields/Syria/h4.yaml create mode 100644 resources/airfields/Syria/haifa.yaml create mode 100644 resources/airfields/Syria/hama.yaml create mode 100644 resources/airfields/Syria/hatay.yaml create mode 100644 resources/airfields/Syria/incirlik.yaml create mode 100644 resources/airfields/Syria/jirah.yaml create mode 100644 resources/airfields/Syria/khalkhalah.yaml create mode 100644 resources/airfields/Syria/king_hussein_air_college.yaml create mode 100644 resources/airfields/Syria/kingsfield.yaml create mode 100644 resources/airfields/Syria/kiryat_shmona.yaml create mode 100644 resources/airfields/Syria/kuweires.yaml create mode 100644 resources/airfields/Syria/lakatamia.yaml create mode 100644 resources/airfields/Syria/larnaca.yaml create mode 100644 resources/airfields/Syria/marj_as_sultan_north.yaml create mode 100644 resources/airfields/Syria/marj_as_sultan_south.yaml create mode 100644 resources/airfields/Syria/marj_ruhayyil.yaml create mode 100644 resources/airfields/Syria/megiddo.yaml create mode 100644 resources/airfields/Syria/mezzeh.yaml create mode 100644 resources/airfields/Syria/minakh.yaml create mode 100644 resources/airfields/Syria/naqoura.yaml create mode 100644 resources/airfields/Syria/palmyra.yaml create mode 100644 resources/airfields/Syria/paphos.yaml create mode 100644 resources/airfields/Syria/pinarbashi.yaml create mode 100644 resources/airfields/Syria/qabr_as_sitt.yaml create mode 100644 resources/airfields/Syria/ramat_david.yaml create mode 100644 resources/airfields/Syria/rayak.yaml create mode 100644 resources/airfields/Syria/rene_mouawad.yaml create mode 100644 resources/airfields/Syria/rosh_pina.yaml create mode 100644 resources/airfields/Syria/sayqal.yaml create mode 100644 resources/airfields/Syria/shayrat.yaml create mode 100644 resources/airfields/Syria/tabqa.yaml create mode 100644 resources/airfields/Syria/taftanaz.yaml create mode 100644 resources/airfields/Syria/tha_lah.yaml create mode 100644 resources/airfields/Syria/tiyas.yaml create mode 100644 resources/airfields/Syria/wujah_al_hajar.yaml create mode 100644 resources/airfields/TheChannel/abbeville_drucat.yaml create mode 100644 resources/airfields/TheChannel/biggin_hill.yaml create mode 100644 resources/airfields/TheChannel/detling.yaml create mode 100644 resources/airfields/TheChannel/dunkirk_mardyck.yaml create mode 100644 resources/airfields/TheChannel/eastchurch.yaml create mode 100644 resources/airfields/TheChannel/hawkinge.yaml create mode 100644 resources/airfields/TheChannel/headcorn.yaml create mode 100644 resources/airfields/TheChannel/high_halden.yaml create mode 100644 resources/airfields/TheChannel/lympne.yaml create mode 100644 resources/airfields/TheChannel/manston.yaml create mode 100644 resources/airfields/TheChannel/merville_calonne.yaml create mode 100644 resources/airfields/TheChannel/saint_omer_longuenesse.yaml create mode 100644 tests/test_radios.py diff --git a/game/missiongenerator/aircraft/flightgroupconfigurator.py b/game/missiongenerator/aircraft/flightgroupconfigurator.py index 609eb5f7..b0b61724 100644 --- a/game/missiongenerator/aircraft/flightgroupconfigurator.py +++ b/game/missiongenerator/aircraft/flightgroupconfigurator.py @@ -71,7 +71,7 @@ class FlightGroupConfigurator: divert = None if self.flight.divert is not None: divert = self.flight.divert.active_runway( - self.game.conditions, self.dynamic_runways + self.game.theater, self.game.conditions, self.dynamic_runways ) mission_start_time, waypoints = WaypointGenerator( @@ -93,10 +93,10 @@ class FlightGroupConfigurator: friendly=self.flight.from_cp.captured, departure_delay=mission_start_time, departure=self.flight.departure.active_runway( - self.game.conditions, self.dynamic_runways + self.game.theater, self.game.conditions, self.dynamic_runways ), arrival=self.flight.arrival.active_runway( - self.game.conditions, self.dynamic_runways + self.game.theater, self.game.conditions, self.dynamic_runways ), divert=divert, waypoints=waypoints, diff --git a/game/missiongenerator/missiongenerator.py b/game/missiongenerator/missiongenerator.py index 4d078548..5c284bb5 100644 --- a/game/missiongenerator/missiongenerator.py +++ b/game/missiongenerator/missiongenerator.py @@ -11,16 +11,16 @@ from dcs.coalition import Coalition from dcs.countries import country_dict from game import db -from game.radio.radios import RadioFrequency, RadioRegistry -from game.radio.tacan import TacanRegistry -from game.theater.bullseye import Bullseye -from game.theater import Airfield, FrontLine -from game.unitmap import UnitMap -from gen.airfields import AIRFIELD_DATA -from gen.naming import namegen from game.missiongenerator.aircraft.aircraftgenerator import ( AircraftGenerator, ) +from game.radio.radios import RadioFrequency, RadioRegistry +from game.radio.tacan import TacanRegistry +from game.theater import Airfield, FrontLine +from game.theater.bullseye import Bullseye +from game.unitmap import UnitMap +from gen.airfields import AirfieldData +from gen.naming import namegen from .aircraft.flightdata import FlightData from .airsupport import AirSupport from .airsupportgenerator import AirSupportGenerator @@ -173,8 +173,8 @@ class MissionGenerator: def initialize_radio_registry( self, unique_map_frequencies: set[RadioFrequency] ) -> None: - for data in AIRFIELD_DATA.values(): - if data.theater == self.game.theater.terrain.name and data.atc: + for data in AirfieldData.for_theater(self.game.theater): + if data.atc is not None: unique_map_frequencies.add(data.atc.hf) unique_map_frequencies.add(data.atc.vhf_fm) unique_map_frequencies.add(data.atc.vhf_am) diff --git a/game/radio/radios.py b/game/radio/radios.py index f54a156b..cde256b4 100644 --- a/game/radio/radios.py +++ b/game/radio/radios.py @@ -1,6 +1,9 @@ """Radio frequency types and allocators.""" +from __future__ import annotations + import itertools import logging +import re from dataclasses import dataclass from typing import Dict, FrozenSet, Iterator, List, Set, Tuple @@ -35,13 +38,37 @@ class RadioFrequency: """ return self.hertz / 1000000 + @classmethod + def parse(cls, text: str) -> RadioFrequency: + match = re.match(r"""^(\d+)(?:\.(\d{1,3}))? (MHz|kHz)$""", text) + if match is None: + raise ValueError(f"Could not parse radio frequency from {text}") + + whole = int(match.group(1)) + partial_str = match.group(2) + units = match.group(3) + + partial = 0 + if partial_str is not None: + partial = int(partial_str) + if len(partial_str) == 1: + partial *= 100 + elif len(partial_str) == 2: + partial *= 10 + + if units == "MHz": + return MHz(whole, partial) + if units == "kHz": + return kHz(whole, partial) + raise ValueError(f"Unexpected units in radio frequency: {units}") + def MHz(num: int, khz: int = 0) -> RadioFrequency: return RadioFrequency(num * 1000000 + khz * 1000) -def kHz(num: int) -> RadioFrequency: - return RadioFrequency(num * 1000) +def kHz(num: int, hz: int = 0) -> RadioFrequency: + return RadioFrequency(num * 1000 + hz) @dataclass(frozen=True) diff --git a/game/radio/tacan.py b/game/radio/tacan.py index 96683be7..07eca28c 100644 --- a/game/radio/tacan.py +++ b/game/radio/tacan.py @@ -1,4 +1,7 @@ """TACAN channel handling.""" +from __future__ import annotations + +import re from dataclasses import dataclass from enum import Enum from typing import Dict, Iterator, Set @@ -45,6 +48,16 @@ class TacanChannel: def __str__(self) -> str: return f"{self.number}{self.band.value}" + @classmethod + def parse(cls, text: str) -> TacanChannel: + match = re.match(r"""^(\d{1,3})([XY])$""", text) + if match is None: + raise ValueError(f"Could not parse TACAN from {text}") + number = int(match.group(1)) + if not number: + raise ValueError("TACAN channel cannot be 0") + return TacanChannel(number, TacanBand(match.group(2))) + class OutOfTacanChannelsError(RuntimeError): """Raised when all channels in this band have been allocated.""" diff --git a/game/theater/controlpoint.py b/game/theater/controlpoint.py index 3e86a3bc..5ab20524 100644 --- a/game/theater/controlpoint.py +++ b/game/theater/controlpoint.py @@ -7,33 +7,26 @@ import math from abc import ABC, abstractmethod from collections import defaultdict from dataclasses import dataclass, field -from enum import Enum, unique, auto, IntEnum -from functools import total_ordering, cached_property +from enum import Enum, IntEnum, auto, unique +from functools import cached_property, total_ordering from typing import ( Any, Dict, + Iterable, Iterator, List, Optional, + Sequence, Set, TYPE_CHECKING, - Union, - Sequence, - Iterable, Tuple, + Union, ) from dcs.mapping import Point -from dcs.ships import ( - Forrestal, - Stennis, - KUZNECOW, - LHA_Tarawa, - Type_071, -) +from dcs.ships import Forrestal, KUZNECOW, LHA_Tarawa, Stennis, Type_071 from dcs.terrain.terrain import Airport, ParkingSlot from dcs.unit import Unit -from dcs.unittype import FlyingType from game import db from game.point_with_heading import PointWithHeading @@ -45,9 +38,9 @@ from gen.runways import RunwayAssigner, RunwayData from .base import Base from .missiontarget import MissionTarget from .theatergroundobject import ( + BuildingGroundObject, GenericCarrierGroundObject, TheaterGroundObject, - BuildingGroundObject, ) from ..ato.starttype import StartType from ..dcs.aircrafttype import AircraftType @@ -61,6 +54,7 @@ if TYPE_CHECKING: from game.squadrons.squadron import Squadron from ..coalition import Coalition from ..transfers import PendingTransfers + from . import ConflictTheater FREE_FRONTLINE_UNIT_SUPPLY: int = 15 AMMO_DEPOT_FRONTLINE_UNIT_CONTRIBUTION: int = 12 @@ -694,7 +688,10 @@ class ControlPoint(MissionTarget, ABC): @abstractmethod def active_runway( - self, conditions: Conditions, dynamic_runways: Dict[str, RunwayData] + self, + theater: ConflictTheater, + conditions: Conditions, + dynamic_runways: Dict[str, RunwayData], ) -> RunwayData: ... @@ -936,10 +933,13 @@ class Airfield(ControlPoint): self.runway_status.damage() def active_runway( - self, conditions: Conditions, dynamic_runways: Dict[str, RunwayData] + self, + theater: ConflictTheater, + conditions: Conditions, + dynamic_runways: Dict[str, RunwayData], ) -> RunwayData: assigner = RunwayAssigner(conditions) - return assigner.get_preferred_runway(self.airport) + return assigner.get_preferred_runway(theater, self.airport) @property def airdrome_id_for_landing(self) -> Optional[int]: @@ -1019,7 +1019,10 @@ class NavalControlPoint(ControlPoint, ABC): return False def active_runway( - self, conditions: Conditions, dynamic_runways: Dict[str, RunwayData] + self, + theater: ConflictTheater, + conditions: Conditions, + dynamic_runways: Dict[str, RunwayData], ) -> RunwayData: # TODO: Assign TACAN and ICLS earlier so we don't need this. fallback = RunwayData( @@ -1161,7 +1164,10 @@ class OffMapSpawn(ControlPoint): return Heading.from_degrees(0) def active_runway( - self, conditions: Conditions, dynamic_runways: Dict[str, RunwayData] + self, + theater: ConflictTheater, + conditions: Conditions, + dynamic_runways: Dict[str, RunwayData], ) -> RunwayData: logging.warning("TODO: Off map spawns have no runways.") return RunwayData( @@ -1202,7 +1208,10 @@ class Fob(ControlPoint): return self.has_helipads def active_runway( - self, conditions: Conditions, dynamic_runways: Dict[str, RunwayData] + self, + theater: ConflictTheater, + conditions: Conditions, + dynamic_runways: Dict[str, RunwayData], ) -> RunwayData: logging.warning("TODO: FOBs have no runways.") return RunwayData( diff --git a/gen/airfields.py b/gen/airfields.py index a58852dd..48528b2b 100644 --- a/gen/airfields.py +++ b/gen/airfields.py @@ -5,11 +5,19 @@ data added to pydcs. Until then, missing data can be manually filled in here. """ from __future__ import annotations +from collections.abc import Iterator from dataclasses import dataclass, field -from typing import Dict, Optional, Tuple +from pathlib import Path +from typing import Any, ClassVar, Dict, Optional, TYPE_CHECKING, Tuple -from game.radio.radios import MHz, RadioFrequency -from game.radio.tacan import TacanBand, TacanChannel +import yaml +from dcs.terrain import Airport + +from game.radio.radios import RadioFrequency +from game.radio.tacan import TacanChannel + +if TYPE_CHECKING: + from game.theater import ConflictTheater @dataclass @@ -19,13 +27,28 @@ class AtcData: vhf_am: RadioFrequency uhf: RadioFrequency + @classmethod + def from_yaml(cls, data: dict[str, Any]) -> Optional[AtcData]: + atc_data = data.get("atc") + if atc_data is None: + return None + return AtcData( + RadioFrequency.parse(atc_data["hf"]), + RadioFrequency.parse(atc_data["vhf_low"]), + RadioFrequency.parse(atc_data["vhf_high"]), + RadioFrequency.parse(atc_data["uhf"]), + ) + @dataclass class AirfieldData: """Additional airfield data not included in pydcs.""" - #: Name of the theater the airport is in. - theater: str + #: Airfield name for the UI. Not stable. + name: str + + #: pydcs airport ID + id: int #: ICAO airport code icao: Optional[str] = None @@ -64,1504 +87,93 @@ class AirfieldData: #: Dict of runway heading -> inner NDB tuple of (callsign, frequency). inner_ndb: Dict[str, Tuple[str, RadioFrequency]] = field(default_factory=dict) + _airfields: ClassVar[dict[str, dict[int, AirfieldData]]] = {} + def ils_freq(self, runway: str) -> Optional[RadioFrequency]: ils = self.ils.get(runway) if ils is not None: return ils[1] return None + @classmethod + def from_file(cls, airfield_yaml: Path) -> AirfieldData: + with airfield_yaml.open() as yaml_file: + data = yaml.safe_load(yaml_file) -# TODO: Add more airfields. -AIRFIELD_DATA = { - # Caucasus - "Batumi": AirfieldData( - theater="Caucasus", - icao="UGSB", - elevation=32, - runway_length=6792, - tacan=TacanChannel(16, TacanBand.X), - tacan_callsign="BTM", - atc=AtcData(MHz(4, 250), MHz(131, 0), MHz(40, 400), MHz(260, 0)), - ils={ - "13": ("ILU", MHz(110, 300)), - }, - ), - "Kobuleti": AirfieldData( - theater="Caucasus", - icao="UG5X", - elevation=59, - runway_length=7406, - tacan=TacanChannel(67, TacanBand.X), - tacan_callsign="KBL", - atc=AtcData(MHz(4, 350), MHz(133, 0), MHz(40, 800), MHz(262, 0)), - ils={ - "07": ("IKB", MHz(111, 500)), - }, - outer_ndb={ - "07": ("KT", MHz(870, 0)), - }, - inner_ndb={ - "07": ("T", MHz(490, 0)), - }, - ), - "Senaki-Kolkhi": AirfieldData( - theater="Caucasus", - icao="UGKS", - elevation=43, - runway_length=7256, - tacan=TacanChannel(31, TacanBand.X), - tacan_callsign="TSK", - atc=AtcData(MHz(4, 300), MHz(132, 0), MHz(40, 600), MHz(261, 0)), - ils={ - "09": ("ITS", MHz(108, 900)), - }, - outer_ndb={ - "09": ("BI", MHz(335, 0)), - }, - inner_ndb={ - "09": ("I", MHz(688, 0)), - }, - ), - "Kutaisi": AirfieldData( - theater="Caucasus", - icao="UGKO", - elevation=147, - runway_length=7937, - tacan=TacanChannel(44, TacanBand.X), - tacan_callsign="KTS", - atc=AtcData(MHz(4, 400), MHz(134, 0), MHz(41, 0), MHz(263, 0)), - ils={ - "08": ("IKS", MHz(109, 750)), - }, - ), - "Sukhumi-Babushara": AirfieldData( - theater="Caucasus", - icao="UGSS", - elevation=43, - runway_length=11217, - atc=AtcData(MHz(4, 150), MHz(129, 0), MHz(40, 0), MHz(258, 0)), - outer_ndb={ - "30": ("AV", MHz(489, 0)), - }, - inner_ndb={ - "30": ("A", MHz(995, 0)), - }, - ), - "Gudauta": AirfieldData( - theater="Caucasus", - icao="UG23", - elevation=68, - runway_length=7839, - atc=AtcData(MHz(4, 200), MHz(120, 0), MHz(40, 200), MHz(259, 0)), - ), - "Sochi-Adler": AirfieldData( - theater="Caucasus", - icao="URSS", - elevation=98, - runway_length=9686, - atc=AtcData(MHz(4, 50), MHz(127, 0), MHz(39, 600), MHz(256, 0)), - ils={ - "06": ("ISO", MHz(111, 100)), - }, - ), - "Gelendzhik": AirfieldData( - theater="Caucasus", - icao="URKG", - elevation=72, - runway_length=5452, - vor=("GN", MHz(114, 30)), - atc=AtcData(MHz(4, 0), MHz(126, 0), MHz(39, 400), MHz(255, 0)), - ), - "Novorossiysk": AirfieldData( - theater="Caucasus", - icao="URKN", - elevation=131, - runway_length=5639, - atc=AtcData(MHz(3, 850), MHz(123, 0), MHz(38, 800), MHz(252, 0)), - ), - "Anapa-Vityazevo": AirfieldData( - theater="Caucasus", - icao="URKA", - elevation=141, - runway_length=8623, - atc=AtcData(MHz(3, 750), MHz(121, 0), MHz(38, 400), MHz(250, 0)), - outer_ndb={ - "22": ("AP", MHz(443, 0)), - "04": ("AN", MHz(443)), - }, - inner_ndb={ - "22": ("P", MHz(215, 0)), - "04": ("N", MHz(215)), - }, - ), - "Krymsk": AirfieldData( - theater="Caucasus", - icao="URKW", - elevation=65, - runway_length=6733, - rsbn=("KW", 28), - atc=AtcData(MHz(3, 900), MHz(124, 0), MHz(39, 0), MHz(253, 0)), - prmg={ - "04": ("OX", 26), - "22": ("KW", 26), - }, - outer_ndb={ - "04": ("OX", MHz(408, 0)), - "22": ("KW", MHz(408, 0)), - }, - inner_ndb={ - "04": ("O", MHz(803, 0)), - "22": ("K", MHz(803, 0)), - }, - ), - "Krasnodar-Center": AirfieldData( - theater="Caucasus", - icao="URKL", - elevation=98, - runway_length=7659, - rsbn=("MB", 40), - atc=AtcData(MHz(3, 800), MHz(122, 0), MHz(38, 600), MHz(251, 0)), - prmg={ - "09": ("MB", 38), - }, - outer_ndb={ - "09": ("MB", MHz(625, 0)), - "27": ("OC", MHz(625, 0)), - }, - inner_ndb={ - "09": ("M", MHz(303, 0)), - "27": ("C", MHz(303, 0)), - }, - ), - "Krasnodar-Pashkovsky": AirfieldData( - theater="Caucasus", - icao="URKK", - elevation=111, - runway_length=9738, - vor=("KN", MHz(115, 80)), - atc=AtcData(MHz(4, 100), MHz(128, 0), MHz(39, 800), MHz(257, 0)), - outer_ndb={ - "23": ("LD", MHz(493, 0)), - "05": ("KR", MHz(493, 0)), - }, - inner_ndb={ - "23": ("L", MHz(240, 0)), - "05": ("K", MHz(240, 0)), - }, - ), - "Maykop-Khanskaya": AirfieldData( - theater="Caucasus", - icao="URKH", - elevation=590, - runway_length=10195, - rsbn=("DG", 34), - atc=AtcData(MHz(3, 950), MHz(125, 0), MHz(39, 200), MHz(254, 0)), - prmg={ - "04": ("DG", 36), - }, - outer_ndb={ - "04": ("DG", MHz(289, 0)), - "22": ("RK", MHz(289, 0)), - }, - inner_ndb={ - "4": ("D", MHz(591, 0)), - "22": ("R", MHz(591, 0)), - }, - ), - "Mineralnye Vody": AirfieldData( - theater="Caucasus", - icao="URMM", - elevation=1049, - runway_length=12316, - vor=("MN", MHz(117, 10)), - atc=AtcData(MHz(4, 450), MHz(135, 0), MHz(41, 200), MHz(264, 0)), - ils={ - "30": ("IMW", MHz(109, 300)), - "12": ("IMD", MHz(111, 700)), - }, - outer_ndb={ - "30": ("NR", MHz(583, 0)), - "12": ("MD", MHz(583, 0)), - }, - inner_ndb={ - "30": ("N", MHz(283, 0)), - "12": ("D", MHz(283, 0)), - }, - ), - "Nalchik": AirfieldData( - theater="Caucasus", - icao="URMN", - elevation=1410, - runway_length=7082, - atc=AtcData(MHz(4, 500), MHz(136, 0), MHz(41, 400), MHz(265, 0)), - ils={ - "24": ("INL", MHz(110, 500)), - }, - outer_ndb={ - "24": ("NL", MHz(718, 0)), - }, - inner_ndb={ - "24": ("N", MHz(350, 0)), - }, - ), - "Mozdok": AirfieldData( - theater="Caucasus", - icao="XRMF", - elevation=507, - runway_length=7734, - rsbn=("MZ", 20), - atc=AtcData(MHz(4, 550), MHz(137, 0), MHz(41, 600), MHz(266, 0)), - prmg={ - "26": ("MZ", 22), - "8": ("MZ", 22), - }, - outer_ndb={ - "26": ("RM", MHz(525, 0)), - "8": ("DO", MHz(525, 0)), - }, - inner_ndb={ - "26": ("R", MHz(1, 6)), - "8": ("D", MHz(1, 6)), - }, - ), - "Beslan": AirfieldData( - theater="Caucasus", - icao="URMO", - elevation=1719, - runway_length=9327, - atc=AtcData(MHz(4, 750), MHz(141, 0), MHz(42, 400), MHz(270, 0)), - ils={ - "10": ("ICH", MHz(110, 500)), - }, - outer_ndb={ - "10": ("CX", MHz(1, 5)), - }, - inner_ndb={ - "10": ("C", MHz(250, 0)), - }, - ), - "Tbilisi-Lochini": AirfieldData( - theater="Caucasus", - icao="UGTB", - elevation=1573, - runway_length=7692, - tacan=TacanChannel(25, TacanBand.X), - tacan_callsign="GTB", - atc=AtcData(MHz(4, 600), MHz(138, 0), MHz(41, 800), MHz(267, 0)), - ils={ - "13": ("INA", MHz(110, 300)), - "30": ("INA", MHz(108, 900)), - }, - outer_ndb={ - "13": ("BP", MHz(342, 0)), - "30": ("NA", MHz(211, 0)), - }, - inner_ndb={ - "13": ("B", MHz(923, 0)), - "30": ("N", MHz(435, 0)), - }, - ), - "Soganlung": AirfieldData( - theater="Caucasus", - icao="UG24", - elevation=1474, - runway_length=7871, - tacan=TacanChannel(25, TacanBand.X), - tacan_callsign="GTB", - atc=AtcData(MHz(4, 650), MHz(139, 0), MHz(42, 0), MHz(268, 0)), - ), - "Vaziani": AirfieldData( - theater="Caucasus", - icao="UG27", - elevation=1523, - runway_length=7842, - tacan=TacanChannel(22, TacanBand.X), - tacan_callsign="VAS", - atc=AtcData(MHz(4, 700), MHz(140, 0), MHz(42, 200), MHz(269, 0)), - ils={ - "13": ("IVZ", MHz(108, 750)), - "31": ("IVZ", MHz(108, 750)), - }, - ), - # PERSIAN GULF MAP - "Liwa AFB": AirfieldData( - theater="Persian Gulf", - icao="OMLW", - elevation=400, - runway_length=10768, - tacan=TacanChannel(121, TacanBand.X), - tacan_callsign="OMLW", - vor=("OMLW", MHz(117, 400)), - atc=AtcData(MHz(4, 225), MHz(39, 350), MHz(119, 300), MHz(250, 950)), - ), - "Al Dhafra AFB": AirfieldData( - theater="Persian Gulf", - icao="OMAM", - elevation=52, - runway_length=11530, - tacan=TacanChannel(96, TacanBand.X), - tacan_callsign="MA", - vor=("MA", MHz(114, 900)), - atc=AtcData(MHz(4, 300), MHz(39, 500), MHz(126, 500), MHz(251, 100)), - ils={ - "13": ("MMA", MHz(111, 100)), - "31": ("IMA", MHz(109, 100)), - }, - ), - "Al-Bateen": AirfieldData( - theater="Persian Gulf", - icao="OMAD", - elevation=11, - runway_length=6808, - vor=("ALB", MHz(114, 0)), - atc=AtcData(MHz(4, 75), MHz(39, 50), MHz(119, 900), MHz(250, 600)), - ), - "Sas Al Nakheel": AirfieldData( - theater="Persian Gulf", - icao="OMNK", - elevation=9, - runway_length=5387, - vor=("SAS", MHz(128, 930)), - atc=AtcData(MHz(4, 0), MHz(38, 900), MHz(128, 900), MHz(250, 450)), - ), - "Abu Dhabi Intl": AirfieldData( - theater="Persian Gulf", - icao="OMAA", - elevation=91, - runway_length=12817, - vor=("ADV", MHz(114, 250)), - atc=AtcData(MHz(4, 50), MHz(39, 0), MHz(119, 200), MHz(250, 550)), - ), - "Al Ain Intl": AirfieldData( - theater="Persian Gulf", - icao="OMAL", - elevation=813, - runway_length=11267, - vor=("ALN", MHz(112, 600)), - atc=AtcData(MHz(4, 125), MHz(39, 150), MHz(119, 850), MHz(250, 700)), - ), - "Al Maktoum Intl": AirfieldData( - theater="Persian Gulf", - icao="OMDW", - elevation=123, - runway_length=11500, - atc=AtcData(MHz(4, 350), MHz(39, 600), MHz(118, 600), MHz(251, 200)), - ils={ - "30": ("IJWA", MHz(109, 750)), - "12": ("IMA", MHz(111, 750)), - }, - ), - "Al Minhad AFB": AirfieldData( - theater="Persian Gulf", - icao="OMDM", - elevation=190, - runway_length=11865, - tacan=TacanChannel(99, TacanBand.X), - tacan_callsign="MIN", - atc=AtcData(MHz(3, 800), MHz(38, 500), MHz(118, 550), MHz(250, 100)), - ils={ - "27": ("IMNR", MHz(110, 750)), - "9": ("IMNW", MHz(110, 700)), - }, - ), - "Dubai Intl": AirfieldData( - theater="Persian Gulf", - icao="OMDB", - elevation=16, - runway_length=11018, - atc=AtcData(MHz(4, 325), MHz(39, 550), MHz(118, 750), MHz(251, 150)), - ils={ - "30": ("IDBL", MHz(110, 900)), - "12": ("IDBR", MHz(110, 100)), - }, - ), - "Sharjah Intl": AirfieldData( - theater="Persian Gulf", - icao="OMSJ", - elevation=98, - runway_length=10535, - atc=AtcData(MHz(3, 850), MHz(38, 600), MHz(118, 600), MHz(250, 200)), - ils={ - "30": ("ISHW", MHz(111, 950)), - "12": ("ISRE", MHz(108, 550)), - }, - ), - "Fujairah Intl": AirfieldData( - theater="Persian Gulf", - icao="OMFJ", - elevation=60, - runway_length=9437, - vor=("FJV", MHz(113, 800)), - atc=AtcData(MHz(4, 375), MHz(39, 650), MHz(124, 600), MHz(251, 250)), - ils={ - "29": ("IFJR", MHz(111, 500)), - }, - ), - "Ras Al Khaimah Intl": AirfieldData( - theater="Persian Gulf", - icao="OMRK", - elevation=70, - runway_length=8406, - vor=("OMRK", MHz(113, 600)), - atc=AtcData(MHz(4, 200), MHz(39, 300), MHz(121, 600), MHz(250, 900)), - ), - "Khasab": AirfieldData( - theater="Persian Gulf", - icao="OOKB", - elevation=47, - runway_length=7513, - atc=AtcData(MHz(3, 750), MHz(38, 400), MHz(124, 350), MHz(250, 000)), - ils={ - "19": ("IBKS", MHz(110, 300)), - }, - ), - "Sir Abu Nuayr": AirfieldData( - theater="Persian Gulf", - icao="OMSN", - elevation=25, - runway_length=2229, - atc=AtcData(MHz(3, 900), MHz(38, 700), MHz(118, 0), MHz(250, 800)), - ), - "Sirri Island": AirfieldData( - theater="Persian Gulf", - icao="OIBS", - elevation=17, - runway_length=7443, - vor=("SIR", MHz(113, 750)), - atc=AtcData(MHz(3, 875), MHz(38, 650), MHz(135, 50), MHz(250, 250)), - ), - "Abu Musa Island": AirfieldData( - theater="Persian Gulf", - icao="OIBA", - elevation=16, - runway_length=7616, - atc=AtcData(MHz(3, 950), MHz(38, 800), MHz(122, 900), MHz(250, 400)), - ), - "Tunb Kochak": AirfieldData( - theater="Persian Gulf", - icao="OITK", - elevation=15, - runway_length=1481, - tacan=TacanChannel(89, TacanBand.X), - tacan_callsign="KCK", - ), - "Tunb Island AFB": AirfieldData( - theater="Persian Gulf", - icao="OIGI", - elevation=42, - runway_length=6099, - ), - "Qeshm Island": AirfieldData( - theater="Persian Gulf", - icao="OIKQ", - elevation=26, - runway_length=13287, - vor=("KHM", MHz(117, 100)), - atc=AtcData(MHz(3, 825), MHz(38, 550), MHz(118, 50), MHz(250, 150)), - ), - "Bandar-e-Jask": AirfieldData( - theater="Persian Gulf", - icao="OIZJ", - elevation=26, - runway_length=6842, - vor=("KHM", MHz(116, 300)), - atc=AtcData(MHz(4, 25), MHz(38, 950), MHz(118, 150), MHz(250, 500)), - ), - "Bandar Lengeh": AirfieldData( - theater="Persian Gulf", - icao="OIBL", - elevation=80, - runway_length=7625, - vor=("LEN", MHz(114, 800)), - atc=AtcData(MHz(4, 275), MHz(39, 450), MHz(121, 700), MHz(251, 50)), - ), - "Kish Intl": AirfieldData( - theater="Persian Gulf", - icao="OIBK", - elevation=114, - runway_length=10617, - tacan=TacanChannel(112, TacanBand.X), - tacan_callsign="KIH", - atc=AtcData(MHz(4, 100), MHz(39, 100), MHz(121, 650), MHz(250, 650)), - ), - "Lavan Island": AirfieldData( - theater="Persian Gulf", - icao="OIBV", - elevation=75, - runway_length=8234, - vor=("LVA", MHz(116, 850)), - atc=AtcData(MHz(4, 150), MHz(39, 200), MHz(128, 550), MHz(250, 750)), - ), - "Lar": AirfieldData( - theater="Persian Gulf", - icao="OISL", - elevation=2635, - runway_length=9600, - vor=("LAR", MHz(117, 900)), - atc=AtcData(MHz(3, 775), MHz(38, 450), MHz(127, 350), MHz(250, 50)), - ), - "Havadarya": AirfieldData( - theater="Persian Gulf", - icao="OIKP", - elevation=50, - runway_length=7300, - tacan=TacanChannel(47, TacanBand.X), - tacan_callsign="HDR", - atc=AtcData(MHz(4, 400), MHz(39, 700), MHz(123, 150), MHz(251, 300)), - ils={ - "8": ("IBHD", MHz(108, 900)), - }, - ), - "Bandar Abbas Intl": AirfieldData( - theater="Persian Gulf", - icao="OIKB", - elevation=18, - runway_length=11640, - tacan=TacanChannel(78, TacanBand.X), - tacan_callsign="BND", - vor=("BND", MHz(117, 200)), - atc=AtcData(MHz(4, 250), MHz(39, 400), MHz(118, 100), MHz(251, 0)), - ils={ - "21": ("IBND", MHz(109, 900)), - }, - ), - "Jiroft": AirfieldData( - theater="Persian Gulf", - icao="OIKJ", - elevation=2664, - runway_length=9160, - atc=AtcData(MHz(4, 125), MHz(39, 120), MHz(136, 0), MHz(250, 750)), - ), - "Kerman": AirfieldData( - theater="Persian Gulf", - icao="OIKK", - elevation=5746, - runway_length=11981, - tacan=TacanChannel(97, TacanBand.X), - tacan_callsign="KER", - vor=("KER", MHz(112, 0)), - atc=AtcData(MHz(3, 925), MHz(38, 750), MHz(118, 250), MHz(250, 300)), - ), - "Shiraz Intl": AirfieldData( - theater="Persian Gulf", - icao="OISS", - elevation=4878, - runway_length=13271, - tacan=TacanChannel(94, TacanBand.X), - tacan_callsign="SYZ1", - vor=("SYZ", MHz(112, 0)), - atc=AtcData(MHz(3, 950), MHz(38, 800), MHz(121, 900), MHz(250, 350)), - ), - # Syria Map - "Adana Sakirpasa": AirfieldData( - theater="Syria", - icao="LTAF", - elevation=55, - runway_length=8115, - vor=("ADA", MHz(112, 700)), - atc=AtcData(MHz(4, 275), MHz(39, 450), MHz(121, 100), MHz(251, 0)), - ils={ - "05": ("IADA", MHz(108, 700)), - }, - ), - "Incirlik": AirfieldData( - theater="Syria", - icao="LTAG", - elevation=156, - runway_length=9662, - tacan=TacanChannel(21, TacanBand.X), - tacan_callsign="DAN", - vor=("DAN", MHz(108, 400)), - atc=AtcData(MHz(3, 900), MHz(38, 700), MHz(122, 100), MHz(360, 100)), - ils={ - "05": ("IDAN", MHz(109, 300)), - "23": ("DANM", MHz(111, 700)), - }, - ), - "Minakh": AirfieldData( - theater="Syria", - icao="OS71", - elevation=1614, - runway_length=4648, - atc=AtcData(MHz(4, 175), MHz(39, 250), MHz(120, 600), MHz(250, 800)), - ), - "Hatay": AirfieldData( - theater="Syria", - icao="LTDA", - elevation=253, - runway_length=9052, - vor=("HTY", MHz(112, 500)), - atc=AtcData(MHz(3, 875), MHz(38, 650), MHz(128, 500), MHz(250, 250)), - ils={ - "22": ("IHTY", MHz(108, 150)), - "04": ("IHAT", MHz(108, 900)), - }, - ), - "Kuweires": AirfieldData( - theater="Syria", - icao="OS66", - elevation=1200, - runway_length=6662, - atc=AtcData(MHz(4, 325), MHz(39, 550), MHz(120, 500), MHz(251, 100)), - ), - "Aleppo": AirfieldData( - theater="Syria", - icao="OSAP", - elevation=1253, - runway_length=8332, - atc=AtcData(MHz(4, 200), MHz(39, 300), MHz(119, 100), MHz(250, 850)), - ), - "Jirah": AirfieldData( - theater="Syria", - icao="OS62", - elevation=1170, - runway_length=9090, - atc=AtcData(MHz(3, 925), MHz(38, 750), MHz(118, 100), MHz(250, 300)), - ), - "Taftanaz": AirfieldData( - theater="Syria", - elevation=1020, - runway_length=2705, - atc=AtcData(MHz(4, 375), MHz(39, 650), MHz(122, 800), MHz(251, 200)), - ), - "Tabqa": AirfieldData( - theater="Syria", - icao="OS59", - elevation=1083, - runway_length=9036, - atc=AtcData(MHz(4, 500), MHz(39, 900), MHz(122, 800), MHz(251, 450)), - ), - "Abu al-Dahur": AirfieldData( - theater="Syria", - icao="OS57", - elevation=820, - runway_length=8728, - atc=AtcData(MHz(4, 0), MHz(38, 900), MHz(122, 200), MHz(250, 450)), - ), - "Bassel Al-Assad": AirfieldData( - theater="Syria", - icao="OSLK", - elevation=93, - runway_length=7305, - vor=("LTK", MHz(114, 800)), - atc=AtcData(MHz(4, 50), MHz(39, 0), MHz(118, 100), MHz(250, 550)), - ils={ - "17": ("IBA", MHz(109, 100)), - }, - ), - "Hama": AirfieldData( - theater="Syria", - icao="OS58", - elevation=983, - runway_length=7957, - atc=AtcData(MHz(3, 850), MHz(38, 600), MHz(118, 50), MHz(250, 200)), - ), - "Rene Mouawad": AirfieldData( - theater="Syria", - icao="OLKA", - elevation=14, - runway_length=8614, - atc=AtcData(MHz(4, 375), MHz(39, 650), MHz(121, 0), MHz(251, 200)), - ), - "Al Quasayr": AirfieldData( - theater="Syria", - icao="OS70", - elevation=1729, - runway_length=8585, - atc=AtcData(MHz(4, 550), MHz(40, 0), MHz(119, 200), MHz(251, 550)), - ), - "Palmyra": AirfieldData( - theater="Syria", - icao="OSPR", - elevation=1267, - runway_length=8704, - atc=AtcData(MHz(4, 225), MHz(39, 350), MHz(121, 900), MHz(250, 900)), - ), - "Wujah Al Hajar": AirfieldData( - theater="Syria", - icao="Z19O", - elevation=619, - runway_length=4717, - vor=("CAK", MHz(116, 200)), - atc=AtcData(MHz(4, 575), MHz(40, 50), MHz(121, 500), MHz(251, 600)), - ), - "An Nasiriyah": AirfieldData( - theater="Syria", - icao="OS64", - elevation=2746, - runway_length=8172, - atc=AtcData(MHz(4, 600), MHz(40, 100), MHz(122, 300), MHz(251, 650)), - ), - "Rayak": AirfieldData( - theater="Syria", - icao="OLRA", - elevation=2934, - runway_length=8699, - vor=("HTY", MHz(124, 400)), - atc=AtcData(MHz(4, 350), MHz(39, 600), MHz(124, 400), MHz(251, 150)), - ), - "Beirut-Rafic Hariri": AirfieldData( - theater="Syria", - icao="OLBA", - elevation=39, - runway_length=9463, - vor=("KAD", MHz(112, 600)), - atc=AtcData(MHz(4, 675), MHz(40, 250), MHz(118, 900), MHz(251, 800)), - ils={ - "17": ("BIL", MHz(109, 500)), - }, - ), - "Al-Dumayr": AirfieldData( - theater="Syria", - icao="OS61", - elevation=2066, - runway_length=8902, - atc=AtcData(MHz(4, 750), MHz(40, 400), MHz(120, 300), MHz(251, 950)), - ), - "Marj as Sultan North": AirfieldData( - theater="Syria", - elevation=2007, - runway_length=268, - atc=AtcData(MHz(4, 75), MHz(38, 50), MHz(122, 700), MHz(250, 600)), - ), - "Marj as Sultan South": AirfieldData( - theater="Syria", - elevation=2007, - runway_length=166, - atc=AtcData(MHz(4, 725), MHz(40, 350), MHz(122, 900), MHz(251, 900)), - ), - "Mezzeh": AirfieldData( - theater="Syria", - icao="OS67", - elevation=2355, - runway_length=7522, - atc=AtcData(MHz(4, 150), MHz(39, 200), MHz(120, 700), MHz(250, 750)), - ), - "Qabr as Sitt": AirfieldData( - theater="Syria", - elevation=2134, - runway_length=489, - atc=AtcData(MHz(4, 250), MHz(39, 400), MHz(122, 600), MHz(250, 950)), - ), - "Damascus": AirfieldData( - theater="Syria", - icao="OSDI", - elevation=2007, - runway_length=11423, - vor=("DAM", MHz(116)), - atc=AtcData(MHz(4, 700), MHz(40, 300), MHz(118, 500), MHz(251, 850)), - ils={ - "24": ("IDA", MHz(109, 900)), - }, - ), - "Marj Ruhayyil": AirfieldData( - theater="Syria", - icao="OS63", - elevation=2160, - runway_length=7576, - atc=AtcData(MHz(4, 100), MHz(39, 100), MHz(120, 800), MHz(250, 6550)), - ), - "Kiryat Shmona": AirfieldData( - theater="Syria", - icao="LLKS", - elevation=328, - runway_length=3258, - atc=AtcData(MHz(4, 25), MHz(38, 950), MHz(118, 400), MHz(250, 500)), - ), - "Khalkhalah": AirfieldData( - theater="Syria", - icao="OS69", - elevation=2337, - runway_length=8248, - atc=AtcData(MHz(3, 950), MHz(38, 800), MHz(122, 500), MHz(250, 350)), - ), - "Haifa": AirfieldData( - theater="Syria", - icao="LLHA", - elevation=19, - runway_length=3253, - atc=AtcData(MHz(3, 825), MHz(38, 550), MHz(127, 800), MHz(250, 150)), - ), - "Ramat David": AirfieldData( - theater="Syria", - icao="LLRD", - elevation=105, - runway_length=7037, - atc=AtcData(MHz(4, 300), MHz(39, 500), MHz(118, 600), MHz(251, 50)), - ), - "Megiddo": AirfieldData( - theater="Syria", - icao="LLMG", - elevation=180, - runway_length=6098, - atc=AtcData(MHz(4, 125), MHz(39, 150), MHz(119, 900), MHz(250, 700)), - ), - "Eyn Shemer": AirfieldData( - theater="Syria", - icao="LLES", - elevation=93, - runway_length=3562, - atc=AtcData(MHz(3, 750), MHz(38, 400), MHz(123, 400), MHz(250)), - ), - "King Hussein Air College": AirfieldData( - theater="Syria", - icao="OJMF", - elevation=2204, - runway_length=8595, - atc=AtcData(MHz(3, 975), MHz(38, 850), MHz(118, 300), MHz(250, 400)), - ), - "Tha'lah": AirfieldData( - theater="Syria", - icao="OS60", - elevation=2381, - runway_length=8025, - atc=AtcData(MHz(4, 650), MHz(40, 200), MHz(122, 400), MHz(251, 750)), - ), - "Shayrat": AirfieldData( - theater="Syria", - icao="OS60", - elevation=2637, - runway_length=8553, - atc=AtcData(MHz(4, 450), MHz(39, 800), MHz(122, 200), MHz(251, 350)), - ), - "Tiyas": AirfieldData( - theater="Syria", - icao="OS72", - elevation=1797, - runway_length=9420, - atc=AtcData(MHz(4, 525), MHz(39, 950), MHz(120, 500), MHz(251, 500)), - ), - "Rosh Pina": AirfieldData( - theater="Syria", - icao="LLIB", - elevation=865, - runway_length=2711, - atc=AtcData(MHz(4, 400), MHz(39, 700), MHz(118, 450), MHz(251, 250)), - ), - "Sayqal": AirfieldData( - theater="Syria", - icao="OS68", - elevation=2273, - runway_length=8536, - atc=AtcData(MHz(4, 425), MHz(39, 750), MHz(120, 400), MHz(251, 300)), - ), - "H4": AirfieldData( - theater="Syria", - icao="OJHR", - elevation=2257, - runway_length=7179, - atc=AtcData(MHz(3, 800), MHz(38, 500), MHz(120, 400), MHz(250, 100)), - ), - "Naqoura": AirfieldData( - theater="Syria", - icao="", - elevation=378, - runway_length=0, - atc=AtcData(MHz(4, 625), MHz(40, 150), MHz(122, 000), MHz(251, 700)), - ), - "Gaziantep": AirfieldData( - theater="Syria", - icao="LTAJ", - elevation=2287, - runway_length=8871, - atc=AtcData(MHz(3, 775), MHz(38, 450), MHz(120, 100), MHz(250, 50)), - ils={ - "28": ("IGNP", MHz(109, 100)), - }, - ), - "Gecitkale": AirfieldData( - theater="Syria", - icao="LCGK", - elevation=147, - runway_length=8156, - vor=("GKE", MHz(114, 300)), - atc=AtcData(MHz(3, 775), MHz(4, 800), MHz(40, 500), MHz(252, 50)), - ), - "Kingsfield": AirfieldData( - theater="Syria", - icao="CY-0004", - elevation=270, - runway_length=3069, - atc=AtcData(MHz(4, 650), MHz(40, 200), MHz(121), MHz(251, 750)), - ), - "Larnaca": AirfieldData( - theater="Syria", - icao="LCRE", - elevation=16, - runway_length=8009, - vor=("LCA", MHz(112, 80)), - atc=AtcData(MHz(4, 700), MHz(40, 300), MHz(121, 200), MHz(251, 850)), - ils={ - "22": ("ILC", MHz(110, 300)), - }, - ), - "Ercan": AirfieldData( - theater="Syria", - icao="LCEN", - elevation=383, - runway_length=7559, - vor=("ECN", MHz(117)), - atc=AtcData(MHz(4, 750), MHz(40, 400), MHz(120, 200), MHz(251, 950)), - ), - "Lakatamia": AirfieldData( - theater="Syria", - icao="CY-0001", - elevation=757, - runway_length=1230, - atc=AtcData(MHz(4, 725), MHz(40, 350), MHz(120, 200), MHz(251, 900)), - ), - "Nicosia": AirfieldData( - theater="Syria", - icao="LCNC", - elevation=716, - runway_length=0, - ), - "Pinarbashi": AirfieldData( - theater="Syria", - icao="CY-0003", - elevation=770, - runway_length=3364, - atc=AtcData(MHz(4, 825), MHz(40, 550), MHz(121), MHz(252, 100)), - ), - "Akrotiri": AirfieldData( - theater="Syria", - icao="LCRA", - elevation=62, - runway_length=8276, - tacan=TacanChannel(107, TacanBand.X), - tacan_callsign="AKR", - vor=("AKR", MHz(116)), - atc=AtcData(MHz(4, 625), MHz(40, 150), MHz(128), MHz(251, 700)), - ils={ - "28": ("IAK", MHz(109, 700)), - }, - ), - "Paphos": AirfieldData( - theater="Syria", - icao="LCPH", - elevation=40, - runway_length=8425, - vor=("PHA", MHz(117, 900)), - atc=AtcData(MHz(4, 675), MHz(40, 250), MHz(119, 900), MHz(251, 800)), - ils={ - "29": ("IPA", MHz(108, 900)), - }, - ), - "Gazipasa": AirfieldData( - theater="Syria", - icao="LTFG", - elevation=36, - runway_length=6885, - vor=("GZP", MHz(114, 200)), - atc=AtcData(MHz(4, 600), MHz(40, 100), MHz(119, 250), MHz(251, 650)), - ils={ - "8": ("IGZP", MHz(108, 500)), - }, - ), - # Nevada - "Mina": AirfieldData( - theater="Nevada", - elevation=4562, - runway_length=4222, - ), - "Tonopah": AirfieldData( - theater="Nevada", - icao="KTPH", - elevation=5394, - runway_length=6715, - ), - "Tonopah Test Range": AirfieldData( - theater="Nevada", - icao="KTNX", - elevation=5534, - runway_length=11633, - tacan=TacanChannel(77, TacanBand.X), - tacan_callsign="TQQ", - atc=AtcData(MHz(3, 800), MHz(124, 750), MHz(38, 500), MHz(257, 950)), - ils={ - "32": ("I-UVV", MHz(111, 700)), - "14": ("I-RVP", MHz(108, 300)), - }, - ), - "Beatty": AirfieldData( - theater="Nevada", - icao="KBTY", - elevation=3173, - runway_length=5380, - ), - "Pahute Mesa": AirfieldData( - theater="Nevada", - elevation=5056, - runway_length=5420, - ), - "Groom Lake": AirfieldData( - theater="Nevada", - icao="KXTA", - elevation=4494, - runway_length=11008, - tacan=TacanChannel(18, TacanBand.X), - tacan_callsign="GRL", - atc=AtcData(MHz(3, 850), MHz(118, 0), MHz(38, 600), MHz(250, 50)), - ils={ - "32": ("GLRI", MHz(109, 300)), - }, - ), - "Lincoln County": AirfieldData( - theater="Nevada", - elevation=4815, - runway_length=4408, - ), - "Mesquite": AirfieldData( - theater="Nevada", - icao="67L", - elevation=1858, - runway_length=4937, - ), - "Creech": AirfieldData( - theater="Nevada", - icao="KINS", - elevation=3126, - runway_length=6100, - tacan=TacanChannel(87, TacanBand.X), - tacan_callsign="INS", - atc=AtcData(MHz(3, 825), MHz(118, 300), MHz(38, 550), MHz(360, 600)), - ils={ - "8": ("ICRR", MHz(108, 700)), - }, - ), - "Echo Bay": AirfieldData( - theater="Nevada", - icao="OL9", - elevation=3126, - runway_length=6100, - tacan=TacanChannel(87, TacanBand.X), - tacan_callsign="INS", - atc=AtcData(MHz(3, 825), MHz(118, 300), MHz(38, 550), MHz(360, 600)), - ), - "Nellis": AirfieldData( - theater="Nevada", - icao="KLSV", - elevation=1841, - runway_length=9454, - tacan=TacanChannel(12, TacanBand.X), - tacan_callsign="LSV", - atc=AtcData(MHz(3, 900), MHz(132, 550), MHz(38, 700), MHz(327, 0)), - ils={ - "21": ("IDIQ", MHz(109, 100)), - }, - ), - "North Las Vegas": AirfieldData( - theater="Nevada", - icao="KVGT", - elevation=2228, - runway_length=4734, - atc=AtcData(MHz(3, 775), MHz(125, 700), MHz(38, 450), MHz(360, 750)), - ), - "McCarran International": AirfieldData( - theater="Nevada", - icao="KLAS", - elevation=2169, - runway_length=10377, - tacan=TacanChannel(116, TacanBand.X), - tacan_callsign="LAS", - atc=AtcData(MHz(3, 875), MHz(119, 900), MHz(38, 650), MHz(257, 800)), - ils={ - "25": ("I-LAS", MHz(110, 300)), - }, - ), - "Henderson Executive": AirfieldData( - theater="Nevada", - icao="KHND", - elevation=2491, - runway_length=5999, - atc=AtcData(MHz(3, 925), MHz(125, 100), MHz(38, 750), MHz(250, 100)), - ), - "Boulder City": AirfieldData( - theater="Nevada", - icao="KBVU", - elevation=2121, - runway_length=4612, - ), - "Jean": AirfieldData( - theater="Nevada", - elevation=2824, - runway_length=4053, - ), - "Laughlin": AirfieldData( - theater="Nevada", - icao="KIFP", - elevation=656, - runway_length=7139, - atc=AtcData(MHz(3, 750), MHz(123, 900), MHz(38, 400), MHz(250, 0)), - ), - # Normandy - "Needs Oar Point": AirfieldData( - theater="Normandy", - elevation=30, - runway_length=5259, - atc=AtcData(MHz(4, 225), MHz(118, 950), MHz(39, 350), MHz(250, 950)), - ), - "Funtington": AirfieldData( - theater="Normandy", - elevation=164, - runway_length=5080, - atc=AtcData(MHz(4, 250), MHz(119, 000), MHz(39, 400), MHz(251, 000)), - ), - "Tangmere": AirfieldData( - theater="Normandy", - elevation=47, - runway_length=4296, - atc=AtcData(MHz(4, 300), MHz(119, 100), MHz(39, 500), MHz(251, 100)), - ), - "Ford_AF": AirfieldData( - theater="Normandy", - elevation=29, - runway_length=4296, - atc=AtcData(MHz(4, 325), MHz(119, 150), MHz(39, 550), MHz(251, 150)), - ), - "Chailey": AirfieldData( - theater="Normandy", - elevation=134, - runway_length=5080, - atc=AtcData(MHz(4, 200), MHz(118, 900), MHz(39, 300), MHz(250, 900)), - ), - "Maupertus": AirfieldData( - theater="Normandy", - icao="A-15", - elevation=441, - runway_length=4666, - atc=AtcData(MHz(4, 550), MHz(119, 600), MHz(40, 000), MHz(251, 600)), - ), - "Azeville": AirfieldData( - theater="Normandy", - icao="A-7", - elevation=74, - runway_length=3357, - atc=AtcData(MHz(3, 875), MHz(118, 250), MHz(38, 650), MHz(250, 250)), - ), - "Biniville": AirfieldData( - theater="Normandy", - icao="A-24", - elevation=106, - runway_length=3283, - atc=AtcData(MHz(3, 750), MHz(118, 000), MHz(38, 400), MHz(250, 000)), - ), - "Beuzeville": AirfieldData( - theater="Normandy", - icao="A-6", - elevation=114, - runway_length=3840, - atc=AtcData(MHz(3, 850), MHz(118, 200), MHz(38, 600), MHz(250, 200)), - ), - "Picauville": AirfieldData( - theater="Normandy", - icao="A-8", - elevation=72, - runway_length=3840, - atc=AtcData(MHz(3, 900), MHz(118, 300), MHz(38, 700), MHz(250, 300)), - ), - "Brucheville": AirfieldData( - theater="Normandy", - icao="A-16", - elevation=45, - runway_length=3413, - atc=AtcData(MHz(4, 575), MHz(119, 650), MHz(40, 50), MHz(251, 650)), - ), - "Cretteville": AirfieldData( - theater="Normandy", - icao="A-14", - elevation=95, - runway_length=4594, - atc=AtcData(MHz(4, 500), MHz(119, 500), MHz(39, 900), MHz(251, 500)), - ), - "Meautis": AirfieldData( - theater="Normandy", - icao="A-17", - elevation=83, - runway_length=3840, - atc=AtcData(MHz(4, 600), MHz(119, 700), MHz(40, 100), MHz(251, 700)), - ), - "Lessay": AirfieldData( - theater="Normandy", - icao="A-20", - elevation=65, - runway_length=5080, - atc=AtcData(MHz(4, 650), MHz(119, 800), MHz(40, 200), MHz(251, 800)), - ), - "Cardonville": AirfieldData( - theater="Normandy", - icao="A-3", - elevation=101, - runway_length=4541, - atc=AtcData(MHz(3, 775), MHz(118, 50), MHz(38, 450), MHz(250, 50)), - ), - "Cricqueville-en-Bessin": AirfieldData( - theater="Normandy", - icao="A-2", - elevation=81, - runway_length=3459, - atc=AtcData(MHz(4, 625), MHz(119, 750), MHz(40, 150), MHz(251, 750)), - ), - "Deux Jumeaux": AirfieldData( - theater="Normandy", - icao="A-4", - elevation=123, - runway_length=4628, - atc=AtcData(MHz(3, 800), MHz(118, 100), MHz(38, 500), MHz(250, 100)), - ), - "Saint Pierre du Mont": AirfieldData( - theater="Normandy", - icao="A-1", - elevation=103, - runway_length=4737, - atc=AtcData(MHz(4, 000), MHz(118, 500), MHz(38, 900), MHz(250, 500)), - ), - "Sainte-Laurent-sur-Mer": AirfieldData( - theater="Normandy", - icao="A-21", - elevation=145, - runway_length=4561, - atc=AtcData(MHz(4, 675), MHz(119, 850), MHz(40, 250), MHz(251, 850)), - ), - "Longues-sur-Mer": AirfieldData( - theater="Normandy", - icao="B-11", - elevation=225, - runway_length=3155, - atc=AtcData(MHz(3, 950), MHz(118, 400), MHz(38, 800), MHz(250, 400)), - ), - "Chippelle": AirfieldData( - theater="Normandy", - icao="A-5", - elevation=124, - runway_length=4643, - atc=AtcData(MHz(3, 825), MHz(118, 150), MHz(38, 550), MHz(250, 150)), - ), - "Le Molay": AirfieldData( - theater="Normandy", - icao="A-9", - elevation=104, - runway_length=3840, - atc=AtcData(MHz(3, 925), MHz(118, 350), MHz(38, 750), MHz(250, 350)), - ), - "Lignerolles": AirfieldData( - theater="Normandy", - icao="A-12", - elevation=404, - runway_length=3436, - atc=AtcData(MHz(4, 275), MHz(119, 50), MHz(39, 450), MHz(251, 50)), - ), - "Sommervieu": AirfieldData( - theater="Normandy", - icao="B-8", - elevation=186, - runway_length=3840, - atc=AtcData(MHz(4, 125), MHz(118, 750), MHz(39, 150), MHz(250, 750)), - ), - "Bazenville": AirfieldData( - theater="Normandy", - icao="B-2", - elevation=199, - runway_length=3800, - atc=AtcData(MHz(4, 25), MHz(118, 550), MHz(38, 950), MHz(250, 550)), - ), - "Rucqueville": AirfieldData( - theater="Normandy", - icao="B-7", - elevation=192, - runway_length=4561, - atc=AtcData(MHz(4, 100), MHz(118, 700), MHz(39, 100), MHz(250, 700)), - ), - "Lantheuil": AirfieldData( - theater="Normandy", - icao="B-9", - elevation=174, - runway_length=3597, - atc=AtcData(MHz(4, 150), MHz(118, 800), MHz(39, 200), MHz(250, 800)), - ), - "Sainte-Croix-sur-Mer": AirfieldData( - theater="Normandy", - icao="B-3", - elevation=160, - runway_length=3840, - atc=AtcData(MHz(4, 50), MHz(118, 600), MHz(39, 000), MHz(250, 600)), - ), - "Beny-sur-Mer": AirfieldData( - theater="Normandy", - icao="B-4", - elevation=199, - runway_length=3155, - atc=AtcData(MHz(4, 75), MHz(118, 650), MHz(39, 50), MHz(250, 650)), - ), - "Carpiquet": AirfieldData( - theater="Normandy", - icao="B-17", - elevation=187, - runway_length=3799, - atc=AtcData(MHz(3, 975), MHz(118, 450), MHz(38, 850), MHz(250, 450)), - ), - "Goulet": AirfieldData( - theater="Normandy", - elevation=616, - runway_length=3283, - atc=AtcData(MHz(4, 375), MHz(119, 250), MHz(39, 650), MHz(251, 250)), - ), - "Argentan": AirfieldData( - theater="Normandy", - elevation=639, - runway_length=3283, - atc=AtcData(MHz(4, 350), MHz(119, 200), MHz(39, 600), MHz(251, 200)), - ), - "Vrigny": AirfieldData( - theater="Normandy", - elevation=590, - runway_length=3283, - atc=AtcData(MHz(4, 475), MHz(119, 450), MHz(39, 850), MHz(251, 450)), - ), - "Hauterive": AirfieldData( - theater="Normandy", - elevation=476, - runway_length=3283, - atc=AtcData(MHz(4, 450), MHz(119, 400), MHz(39, 800), MHz(251, 400)), - ), - "Essay": AirfieldData( - theater="Normandy", - elevation=507, - runway_length=3283, - atc=AtcData(MHz(4, 425), MHz(119, 350), MHz(39, 750), MHz(251, 350)), - ), - "Barville": AirfieldData( - theater="Normandy", - elevation=462, - runway_length=3493, - atc=AtcData(MHz(4, 400), MHz(119, 300), MHz(39, 700), MHz(251, 300)), - ), - "Conches": AirfieldData( - theater="Normandy", - elevation=541, - runway_length=4199, - atc=AtcData(MHz(4, 525), MHz(119, 550), MHz(39, 950), MHz(251, 550)), - ), - "Evreux": AirfieldData( - theater="Normandy", - elevation=423, - runway_length=4296, - atc=AtcData(MHz(4, 175), MHz(118, 850), MHz(39, 250), MHz(250, 850)), - ), - # Channel Map - "Detling": AirfieldData( - theater="Channel", - elevation=623, - runway_length=3482, - atc=AtcData(MHz(4, 50), MHz(118, 600), MHz(39, 0), MHz(250, 600)), - ), - "High Halden": AirfieldData( - theater="Channel", - elevation=104, - runway_length=3296, - atc=AtcData(MHz(3, 800), MHz(118, 100), MHz(38, 500), MHz(250, 100)), - ), - "Lympne": AirfieldData( - theater="Channel", - elevation=351, - runway_length=3054, - atc=AtcData(MHz(4, 25), MHz(118, 550), MHz(38, 950), MHz(250, 550)), - ), - "Hawkinge": AirfieldData( - theater="Channel", - elevation=524, - runway_length=3013, - atc=AtcData(MHz(4, 0), MHz(118, 500), MHz(38, 900), MHz(250, 500)), - ), - "Manston": AirfieldData( - theater="Channel", - elevation=160, - runway_length=8626, - atc=AtcData(MHz(3, 975), MHz(118, 250), MHz(38, 650), MHz(250, 250)), - ), - "Dunkirk Mardyck": AirfieldData( - theater="Channel", - elevation=16, - runway_length=1737, - atc=AtcData(MHz(3, 950), MHz(118, 450), MHz(38, 850), MHz(250, 450)), - ), - "Saint Omer Longuenesse": AirfieldData( - theater="Channel", - elevation=219, - runway_length=1929, - atc=AtcData(MHz(3, 925), MHz(118, 350), MHz(38, 750), MHz(250, 350)), - ), - "Merville Calonne": AirfieldData( - theater="Channel", - elevation=52, - runway_length=7580, - atc=AtcData(MHz(3, 900), MHz(118, 300), MHz(38, 700), MHz(250, 300)), - ), - "Abbeville Drucat": AirfieldData( - theater="Channel", - elevation=183, - runway_length=4726, - atc=AtcData(MHz(3, 875), MHz(118, 250), MHz(38, 650), MHz(250, 250)), - ), - "Eastchurch": AirfieldData( - theater="Channel", - elevation=30, - runway_length=2983, - atc=AtcData(MHz(3, 775), MHz(118, 50), MHz(38, 450), MHz(250, 50)), - ), - "Headcorn": AirfieldData( - theater="Channel", - elevation=114, - runway_length=3680, - atc=AtcData(MHz(3, 825), MHz(118, 150), MHz(38, 550), MHz(250, 150)), - ), - "Biggin Hill": AirfieldData( - theater="Channel", - elevation=552, - runway_length=3953, - atc=AtcData(MHz(3, 850), MHz(118, 200), MHz(38, 600), MHz(250, 200)), - ), - "Antonio B. Won Pat Intl": AirfieldData( - theater="MarianaIslands", - icao="PGUM", - elevation=255, - runway_length=9359, - atc=AtcData(MHz(3, 825), MHz(118, 100), MHz(38, 550), MHz(340, 200)), - ils={ - "06": ("IGUM", MHz(110, 30)), - }, - ), - "Andersen AFB": AirfieldData( - theater="MarianaIslands", - icao="PGUA", - elevation=545, - runway_length=10490, - tacan=TacanChannel(54, TacanBand.X), - tacan_callsign="UAM", - atc=AtcData(MHz(3, 850), MHz(126, 200), MHz(38, 600), MHz(250, 100)), - ), - "Rota Intl": AirfieldData( - theater="MarianaIslands", - icao="PGRO", - elevation=568, - runway_length=6105, - atc=AtcData(MHz(3, 750), MHz(123, 600), MHz(38, 400), MHz(250, 0)), - ), - "Tinian Intl": AirfieldData( - theater="MarianaIslands", - icao="PGWT", - elevation=240, - runway_length=7777, - atc=AtcData(MHz(3, 800), MHz(123, 650), MHz(38, 500), MHz(250, 50)), - ), - "Saipan Intl": AirfieldData( - theater="MarianaIslands", - icao="PGSN", - elevation=213, - runway_length=7790, - atc=AtcData(MHz(3, 775), MHz(125, 700), MHz(38, 450), MHz(256, 900)), - ils={ - "07": ("IGSN", MHz(109, 90)), - }, - ), -} + tacan_channel = None + tacan_callsign = None + if (tacan := data.get("tacan")) is not None: + tacan_channel = TacanChannel.parse(tacan["channel"]) + tacan_callsign = tacan["callsign"] + + vor = None + if (vor_data := data.get("vor")) is not None: + vor = (vor_data["callsign"], RadioFrequency.parse(vor_data["frequency"])) + + rsbn = None + if (rsbn_data := data.get("rsbn")) is not None: + rsbn = (rsbn_data["callsign"], rsbn_data["channel"]) + + ils = {} + prmg = {} + outer_ndb = {} + inner_ndb = {} + for name, runway_data in data.get("runways", {}).items(): + if (ils_data := runway_data.get("ils")) is not None: + ils[name] = ( + ils_data["callsign"], + RadioFrequency.parse(ils_data["frequency"]), + ) + + if (prmg_data := runway_data.get("prmg")) is not None: + prmg[name] = (prmg_data["callsign"], prmg_data["channel"]) + + if (outer_ndb_data := runway_data.get("outer_ndb")) is not None: + outer_ndb[name] = ( + outer_ndb_data["callsign"], + RadioFrequency.parse(outer_ndb_data["frequency"]), + ) + + if (inner_ndb_data := runway_data.get("inner_ndb")) is not None: + inner_ndb[name] = ( + inner_ndb_data["callsign"], + RadioFrequency.parse(inner_ndb_data["frequency"]), + ) + + return AirfieldData( + data["name"], + data["id"], + data.get("icao"), + data["elevation"], + data["runway_length"], + tacan_channel, + tacan_callsign, + vor, + rsbn, + AtcData.from_yaml(data), + ils, + prmg, + outer_ndb, + inner_ndb, + ) + + @classmethod + def _load_for_theater_if_needed(cls, theater: ConflictTheater) -> None: + if theater.terrain.name in cls._airfields: + return + + airfields = {} + base_path = Path("resources/airfields") / theater.terrain.name + for airfield_yaml in base_path.iterdir(): + data = cls.from_file(airfield_yaml) + airfields[data.id] = data + cls._airfields[theater.terrain.name] = airfields + + @classmethod + def for_airport(cls, theater: ConflictTheater, airport: Airport) -> AirfieldData: + return cls._airfields[theater.terrain.name][airport.id] + + @classmethod + def for_theater(cls, theater: ConflictTheater) -> Iterator[AirfieldData]: + cls._load_for_theater_if_needed(theater) + yield from cls._airfields[theater.terrain.name].values() diff --git a/gen/runways.py b/gen/runways.py index 0f30fdcc..80e0aef3 100644 --- a/gen/runways.py +++ b/gen/runways.py @@ -3,15 +3,18 @@ from __future__ import annotations import logging from dataclasses import dataclass -from typing import Iterator, Optional +from typing import Iterator, Optional, TYPE_CHECKING from dcs.terrain.terrain import Airport -from game.weather import Conditions -from game.utils import Heading -from .airfields import AIRFIELD_DATA from game.radio.radios import RadioFrequency from game.radio.tacan import TacanChannel +from game.utils import Heading +from game.weather import Conditions +from gen.airfields import AirfieldData + +if TYPE_CHECKING: + from game.theater import ConflictTheater @dataclass(frozen=True) @@ -27,11 +30,16 @@ class RunwayData: @classmethod def for_airfield( - cls, airport: Airport, runway_heading: Heading, runway_name: str + cls, + theater: ConflictTheater, + airport: Airport, + runway_heading: Heading, + runway_name: str, ) -> RunwayData: """Creates RunwayData for the given runway of an airfield. Args: + theater: The theater the airport is in. airport: The airfield the runway belongs to. runway_heading: Heading of the runway. runway_name: Identifier of the runway to use. e.g. "03" or "20L". @@ -41,7 +49,7 @@ class RunwayData: tacan_callsign: Optional[str] = None ils: Optional[RadioFrequency] = None try: - airfield = AIRFIELD_DATA[airport.name] + airfield = AirfieldData.for_airport(theater, airport) if airfield.atc is not None: atc = airfield.atc.uhf else: @@ -50,7 +58,7 @@ class RunwayData: tacan_callsign = airfield.tacan_callsign ils = airfield.ils_freq(runway_name) except KeyError: - logging.warning(f"No airfield data for {airport.name}") + logging.warning(f"No airfield data for {airport.name} ({airport.id}") return cls( airfield_name=airport.name, runway_heading=runway_heading, @@ -62,13 +70,15 @@ class RunwayData: ) @classmethod - def for_pydcs_airport(cls, airport: Airport) -> Iterator[RunwayData]: + def for_pydcs_airport( + cls, theater: ConflictTheater, airport: Airport + ) -> Iterator[RunwayData]: for runway in airport.runways: runway_number = runway.heading // 10 runway_side = ["", "L", "R"][runway.leftright] runway_name = f"{runway_number:02}{runway_side}" yield cls.for_airfield( - airport, Heading.from_degrees(runway.heading), runway_name + theater, airport, Heading.from_degrees(runway.heading), runway_name ) # pydcs only exposes one runway per physical runway, so to expose @@ -77,7 +87,7 @@ class RunwayData: runway_number = heading.degrees // 10 runway_side = ["", "R", "L"][runway.leftright] runway_name = f"{runway_number:02}{runway_side}" - yield cls.for_airfield(airport, heading, runway_name) + yield cls.for_airfield(theater, airport, heading, runway_name) class RunwayAssigner: @@ -89,7 +99,9 @@ class RunwayAssigner: ideal_heading = wind.opposite return runway.runway_heading.angle_between(ideal_heading) - def get_preferred_runway(self, airport: Airport) -> RunwayData: + def get_preferred_runway( + self, theater: ConflictTheater, airport: Airport + ) -> RunwayData: """Returns the preferred runway for the given airport. Right now we're only selecting runways based on whether or not @@ -97,7 +109,7 @@ class RunwayAssigner: ILS, but we could also choose based on wind conditions, or which direction flight plans should follow. """ - runways = list(RunwayData.for_pydcs_airport(airport)) + runways = list(RunwayData.for_pydcs_airport(theater, airport)) # Find the runway with the best headwind first. best_runways = [runways[0]] diff --git a/resources/airfields/Caucasus/anapa_vityazevo.yaml b/resources/airfields/Caucasus/anapa_vityazevo.yaml new file mode 100644 index 00000000..a67b6a87 --- /dev/null +++ b/resources/airfields/Caucasus/anapa_vityazevo.yaml @@ -0,0 +1,26 @@ +--- +name: Anapa-Vityazevo +id: 12 +icao: URKA +elevation: 141 +runway_length: 8623 +atc: + hf: 3.750 MHz + vhf_low: 38.400 MHz + vhf_high: 121 MHz + uhf: 250 MHz +runways: + "22": + outer_ndb: + callsign: AP + frequency: 443 MHz + inner_ndb: + callsign: P + frequency: 215 MHz + "04": + outer_ndb: + callsign: AN + frequency: 443 MHz + inner_ndb: + callsign: N + frequency: 215 MHz diff --git a/resources/airfields/Caucasus/batumi.yaml b/resources/airfields/Caucasus/batumi.yaml new file mode 100644 index 00000000..b92eea41 --- /dev/null +++ b/resources/airfields/Caucasus/batumi.yaml @@ -0,0 +1,19 @@ +--- +name: Batumi +id: 22 +icao: UGSB +elevation: 32 +runway_length: 6792 +tacan: + callsign: BTM + channel: 16X +atc: + hf: 4.250 MHz + vhf_low: 40.400 MHz + vhf_high: 131 MHz + uhf: 260 MHz +runways: + "13": + ils: + callsign: ILU + frequency: 110.300 MHz diff --git a/resources/airfields/Caucasus/beslan.yaml b/resources/airfields/Caucasus/beslan.yaml new file mode 100644 index 00000000..66584250 --- /dev/null +++ b/resources/airfields/Caucasus/beslan.yaml @@ -0,0 +1,22 @@ +--- +name: Beslan +id: 32 +icao: URMO +elevation: 1719 +runway_length: 9327 +atc: + hf: 4.750 MHz + vhf_low: 42.400 MHz + vhf_high: 141 MHz + uhf: 270 MHz +runways: + "10": + ils: + callsign: ICH + frequency: 110.500 MHz + outer_ndb: + callsign: CX + frequency: 1.005 MHz + inner_ndb: + callsign: C + frequency: 250 MHz diff --git a/resources/airfields/Caucasus/gelendzhik.yaml b/resources/airfields/Caucasus/gelendzhik.yaml new file mode 100644 index 00000000..359b1ed6 --- /dev/null +++ b/resources/airfields/Caucasus/gelendzhik.yaml @@ -0,0 +1,14 @@ +--- +name: Gelendzhik +id: 17 +icao: URKG +elevation: 72 +runway_length: 5452 +vor: + callsign: GN + frequency: 114.030 MHz +atc: + hf: 4 MHz + vhf_low: 39.400 MHz + vhf_high: 126 MHz + uhf: 255 MHz diff --git a/resources/airfields/Caucasus/gudauta.yaml b/resources/airfields/Caucasus/gudauta.yaml new file mode 100644 index 00000000..14174bd0 --- /dev/null +++ b/resources/airfields/Caucasus/gudauta.yaml @@ -0,0 +1,11 @@ +--- +name: Gudauta +id: 21 +icao: UG23 +elevation: 68 +runway_length: 7839 +atc: + hf: 4.200 MHz + vhf_low: 40.200 MHz + vhf_high: 120 MHz + uhf: 259 MHz diff --git a/resources/airfields/Caucasus/kobuleti.yaml b/resources/airfields/Caucasus/kobuleti.yaml new file mode 100644 index 00000000..29b242d8 --- /dev/null +++ b/resources/airfields/Caucasus/kobuleti.yaml @@ -0,0 +1,25 @@ +--- +name: Kobuleti +id: 24 +icao: UG5X +elevation: 59 +runway_length: 7406 +tacan: + callsign: KBL + channel: 67X +atc: + hf: 4.350 MHz + vhf_low: 40.800 MHz + vhf_high: 133 MHz + uhf: 262 MHz +runways: + "07": + ils: + callsign: IKB + frequency: 111.500 MHz + outer_ndb: + callsign: KT + frequency: 870 MHz + inner_ndb: + callsign: T + frequency: 490 MHz diff --git a/resources/airfields/Caucasus/krasnodar_center.yaml b/resources/airfields/Caucasus/krasnodar_center.yaml new file mode 100644 index 00000000..f25438d2 --- /dev/null +++ b/resources/airfields/Caucasus/krasnodar_center.yaml @@ -0,0 +1,32 @@ +--- +name: Krasnodar-Center +id: 13 +icao: URKL +elevation: 98 +runway_length: 7659 +rsbn: + callsign: MB + channel: 40 +atc: + hf: 3.800 MHz + vhf_low: 38.600 MHz + vhf_high: 122 MHz + uhf: 251 MHz +runways: + "27": + outer_ndb: + callsign: OC + frequency: 625 MHz + inner_ndb: + callsign: C + frequency: 303 MHz + 09: + prmg: + callsign: MB + channel: 38 + outer_ndb: + callsign: MB + frequency: 625 MHz + inner_ndb: + callsign: M + frequency: 303 MHz diff --git a/resources/airfields/Caucasus/krasnodar_pashkovsky.yaml b/resources/airfields/Caucasus/krasnodar_pashkovsky.yaml new file mode 100644 index 00000000..e14cc2dc --- /dev/null +++ b/resources/airfields/Caucasus/krasnodar_pashkovsky.yaml @@ -0,0 +1,29 @@ +--- +name: Krasnodar-Pashkovsky +id: 19 +icao: URKK +elevation: 111 +runway_length: 9738 +vor: + callsign: KN + frequency: 115.080 MHz +atc: + hf: 4.100 MHz + vhf_low: 39.800 MHz + vhf_high: 128 MHz + uhf: 257 MHz +runways: + "23": + outer_ndb: + callsign: LD + frequency: 493 MHz + inner_ndb: + callsign: L + frequency: 240 MHz + "05": + outer_ndb: + callsign: KR + frequency: 493 MHz + inner_ndb: + callsign: K + frequency: 240 MHz diff --git a/resources/airfields/Caucasus/krymsk.yaml b/resources/airfields/Caucasus/krymsk.yaml new file mode 100644 index 00000000..b4f701a9 --- /dev/null +++ b/resources/airfields/Caucasus/krymsk.yaml @@ -0,0 +1,35 @@ +--- +name: Krymsk +id: 15 +icao: URKW +elevation: 65 +runway_length: 6733 +rsbn: + callsign: KW + channel: 28 +atc: + hf: 3.900 MHz + vhf_low: 39 MHz + vhf_high: 124 MHz + uhf: 253 MHz +runways: + "22": + prmg: + callsign: KW + channel: 26 + outer_ndb: + callsign: KW + frequency: 408 MHz + inner_ndb: + callsign: K + frequency: 803 MHz + "04": + prmg: + callsign: OX + channel: 26 + outer_ndb: + callsign: OX + frequency: 408 MHz + inner_ndb: + callsign: O + frequency: 803 MHz diff --git a/resources/airfields/Caucasus/kutaisi.yaml b/resources/airfields/Caucasus/kutaisi.yaml new file mode 100644 index 00000000..0aacee71 --- /dev/null +++ b/resources/airfields/Caucasus/kutaisi.yaml @@ -0,0 +1,19 @@ +--- +name: Kutaisi +id: 25 +icao: UGKO +elevation: 147 +runway_length: 7937 +tacan: + callsign: KTS + channel: 44X +atc: + hf: 4.400 MHz + vhf_low: 41 MHz + vhf_high: 134 MHz + uhf: 263 MHz +runways: + 08: + ils: + callsign: IKS + frequency: 109.750 MHz diff --git a/resources/airfields/Caucasus/maykop_khanskaya.yaml b/resources/airfields/Caucasus/maykop_khanskaya.yaml new file mode 100644 index 00000000..9494ff55 --- /dev/null +++ b/resources/airfields/Caucasus/maykop_khanskaya.yaml @@ -0,0 +1,33 @@ +--- +name: Maykop-Khanskaya +id: 16 +icao: URKH +elevation: 590 +runway_length: 10195 +rsbn: + callsign: DG + channel: 34 +atc: + hf: 3.950 MHz + vhf_low: 39.200 MHz + vhf_high: 125 MHz + uhf: 254 MHz +runways: + "22": + outer_ndb: + callsign: RK + frequency: 289 MHz + inner_ndb: + callsign: R + frequency: 591 MHz + "4": + inner_ndb: + callsign: D + frequency: 591 MHz + "04": + prmg: + callsign: DG + channel: 36 + outer_ndb: + callsign: DG + frequency: 289 MHz diff --git a/resources/airfields/Caucasus/mineralnye_vody.yaml b/resources/airfields/Caucasus/mineralnye_vody.yaml new file mode 100644 index 00000000..f3fcd43f --- /dev/null +++ b/resources/airfields/Caucasus/mineralnye_vody.yaml @@ -0,0 +1,35 @@ +--- +name: Mineralnye Vody +id: 26 +icao: URMM +elevation: 1049 +runway_length: 12316 +vor: + callsign: MN + frequency: 117.010 MHz +atc: + hf: 4.450 MHz + vhf_low: 41.200 MHz + vhf_high: 135 MHz + uhf: 264 MHz +runways: + "12": + ils: + callsign: IMD + frequency: 111.700 MHz + outer_ndb: + callsign: MD + frequency: 583 MHz + inner_ndb: + callsign: D + frequency: 283 MHz + "30": + ils: + callsign: IMW + frequency: 109.300 MHz + outer_ndb: + callsign: NR + frequency: 583 MHz + inner_ndb: + callsign: N + frequency: 283 MHz diff --git a/resources/airfields/Caucasus/mozdok.yaml b/resources/airfields/Caucasus/mozdok.yaml new file mode 100644 index 00000000..1c39df57 --- /dev/null +++ b/resources/airfields/Caucasus/mozdok.yaml @@ -0,0 +1,35 @@ +--- +name: Mozdok +id: 28 +icao: XRMF +elevation: 507 +runway_length: 7734 +rsbn: + callsign: MZ + channel: 20 +atc: + hf: 4.550 MHz + vhf_low: 41.600 MHz + vhf_high: 137 MHz + uhf: 266 MHz +runways: + "26": + prmg: + callsign: MZ + channel: 22 + outer_ndb: + callsign: RM + frequency: 525 MHz + inner_ndb: + callsign: R + frequency: 1.006 MHz + "8": + prmg: + callsign: MZ + channel: 22 + outer_ndb: + callsign: DO + frequency: 525 MHz + inner_ndb: + callsign: D + frequency: 1.006 MHz diff --git a/resources/airfields/Caucasus/nalchik.yaml b/resources/airfields/Caucasus/nalchik.yaml new file mode 100644 index 00000000..f16d4511 --- /dev/null +++ b/resources/airfields/Caucasus/nalchik.yaml @@ -0,0 +1,22 @@ +--- +name: Nalchik +id: 27 +icao: URMN +elevation: 1410 +runway_length: 7082 +atc: + hf: 4.500 MHz + vhf_low: 41.400 MHz + vhf_high: 136 MHz + uhf: 265 MHz +runways: + "24": + ils: + callsign: INL + frequency: 110.500 MHz + outer_ndb: + callsign: NL + frequency: 718 MHz + inner_ndb: + callsign: N + frequency: 350 MHz diff --git a/resources/airfields/Caucasus/novorossiysk.yaml b/resources/airfields/Caucasus/novorossiysk.yaml new file mode 100644 index 00000000..28a43435 --- /dev/null +++ b/resources/airfields/Caucasus/novorossiysk.yaml @@ -0,0 +1,11 @@ +--- +name: Novorossiysk +id: 14 +icao: URKN +elevation: 131 +runway_length: 5639 +atc: + hf: 3.850 MHz + vhf_low: 38.800 MHz + vhf_high: 123 MHz + uhf: 252 MHz diff --git a/resources/airfields/Caucasus/senaki_kolkhi.yaml b/resources/airfields/Caucasus/senaki_kolkhi.yaml new file mode 100644 index 00000000..04e38f89 --- /dev/null +++ b/resources/airfields/Caucasus/senaki_kolkhi.yaml @@ -0,0 +1,25 @@ +--- +name: Senaki-Kolkhi +id: 23 +icao: UGKS +elevation: 43 +runway_length: 7256 +tacan: + callsign: TSK + channel: 31X +atc: + hf: 4.300 MHz + vhf_low: 40.600 MHz + vhf_high: 132 MHz + uhf: 261 MHz +runways: + 09: + ils: + callsign: ITS + frequency: 108.900 MHz + outer_ndb: + callsign: BI + frequency: 335 MHz + inner_ndb: + callsign: I + frequency: 688 MHz diff --git a/resources/airfields/Caucasus/sochi_adler.yaml b/resources/airfields/Caucasus/sochi_adler.yaml new file mode 100644 index 00000000..b2b50c2e --- /dev/null +++ b/resources/airfields/Caucasus/sochi_adler.yaml @@ -0,0 +1,16 @@ +--- +name: Sochi-Adler +id: 18 +icao: URSS +elevation: 98 +runway_length: 9686 +atc: + hf: 4.050 MHz + vhf_low: 39.600 MHz + vhf_high: 127 MHz + uhf: 256 MHz +runways: + "06": + ils: + callsign: ISO + frequency: 111.100 MHz diff --git a/resources/airfields/Caucasus/soganlug.yaml b/resources/airfields/Caucasus/soganlug.yaml new file mode 100644 index 00000000..8edbdbba --- /dev/null +++ b/resources/airfields/Caucasus/soganlug.yaml @@ -0,0 +1,14 @@ +--- +name: Soganlug +id: 30 +icao: UG24 +elevation: 1474 +runway_length: 7871 +tacan: + callsign: GTB + channel: 25X +atc: + hf: 4.650 MHz + vhf_low: 42 MHz + vhf_high: 139 MHz + uhf: 268 MHz diff --git a/resources/airfields/Caucasus/sukhumi_babushara.yaml b/resources/airfields/Caucasus/sukhumi_babushara.yaml new file mode 100644 index 00000000..bce709ea --- /dev/null +++ b/resources/airfields/Caucasus/sukhumi_babushara.yaml @@ -0,0 +1,19 @@ +--- +name: Sukhumi-Babushara +id: 20 +icao: UGSS +elevation: 43 +runway_length: 11217 +atc: + hf: 4.150 MHz + vhf_low: 40 MHz + vhf_high: 129 MHz + uhf: 258 MHz +runways: + "30": + outer_ndb: + callsign: AV + frequency: 489 MHz + inner_ndb: + callsign: A + frequency: 995 MHz diff --git a/resources/airfields/Caucasus/tbilisi_lochini.yaml b/resources/airfields/Caucasus/tbilisi_lochini.yaml new file mode 100644 index 00000000..e38c1cfc --- /dev/null +++ b/resources/airfields/Caucasus/tbilisi_lochini.yaml @@ -0,0 +1,35 @@ +--- +name: Tbilisi-Lochini +id: 29 +icao: UGTB +elevation: 1573 +runway_length: 7692 +tacan: + callsign: GTB + channel: 25X +atc: + hf: 4.600 MHz + vhf_low: 41.800 MHz + vhf_high: 138 MHz + uhf: 267 MHz +runways: + "13": + ils: + callsign: INA + frequency: 110.300 MHz + outer_ndb: + callsign: BP + frequency: 342 MHz + inner_ndb: + callsign: B + frequency: 923 MHz + "30": + ils: + callsign: INA + frequency: 108.900 MHz + outer_ndb: + callsign: NA + frequency: 211 MHz + inner_ndb: + callsign: N + frequency: 435 MHz diff --git a/resources/airfields/Caucasus/vaziani.yaml b/resources/airfields/Caucasus/vaziani.yaml new file mode 100644 index 00000000..5ab8f7f8 --- /dev/null +++ b/resources/airfields/Caucasus/vaziani.yaml @@ -0,0 +1,23 @@ +--- +name: Vaziani +id: 31 +icao: UG27 +elevation: 1523 +runway_length: 7842 +tacan: + callsign: VAS + channel: 22X +atc: + hf: 4.700 MHz + vhf_low: 42.200 MHz + vhf_high: 140 MHz + uhf: 269 MHz +runways: + "31": + ils: + callsign: IVZ + frequency: 108.750 MHz + "13": + ils: + callsign: IVZ + frequency: 108.750 MHz diff --git a/resources/airfields/MarianaIslands/andersen_afb.yaml b/resources/airfields/MarianaIslands/andersen_afb.yaml new file mode 100644 index 00000000..4dab191c --- /dev/null +++ b/resources/airfields/MarianaIslands/andersen_afb.yaml @@ -0,0 +1,14 @@ +--- +name: Andersen AFB +id: 6 +icao: PGUA +elevation: 545 +runway_length: 10490 +tacan: + callsign: UAM + channel: 54X +atc: + hf: 3.850 MHz + vhf_low: 38.600 MHz + vhf_high: 126.200 MHz + uhf: 250.100 MHz diff --git a/resources/airfields/MarianaIslands/antonio_b__won_pat_intl.yaml b/resources/airfields/MarianaIslands/antonio_b__won_pat_intl.yaml new file mode 100644 index 00000000..67bcff0a --- /dev/null +++ b/resources/airfields/MarianaIslands/antonio_b__won_pat_intl.yaml @@ -0,0 +1,16 @@ +--- +name: Antonio B. Won Pat Intl +id: 4 +icao: PGUM +elevation: 255 +runway_length: 9359 +atc: + hf: 3.825 MHz + vhf_low: 38.550 MHz + vhf_high: 118.100 MHz + uhf: 340.200 MHz +runways: + "06": + ils: + callsign: IGUM + frequency: 110.030 MHz diff --git a/resources/airfields/MarianaIslands/rota_intl.yaml b/resources/airfields/MarianaIslands/rota_intl.yaml new file mode 100644 index 00000000..1b6bc59a --- /dev/null +++ b/resources/airfields/MarianaIslands/rota_intl.yaml @@ -0,0 +1,11 @@ +--- +name: Rota Intl +id: 1 +icao: PGRO +elevation: 568 +runway_length: 6105 +atc: + hf: 3.750 MHz + vhf_low: 38.400 MHz + vhf_high: 123.600 MHz + uhf: 250 MHz diff --git a/resources/airfields/MarianaIslands/saipan_intl.yaml b/resources/airfields/MarianaIslands/saipan_intl.yaml new file mode 100644 index 00000000..e2763d6c --- /dev/null +++ b/resources/airfields/MarianaIslands/saipan_intl.yaml @@ -0,0 +1,16 @@ +--- +name: Saipan Intl +id: 2 +icao: PGSN +elevation: 213 +runway_length: 7790 +atc: + hf: 3.775 MHz + vhf_low: 38.450 MHz + vhf_high: 125.700 MHz + uhf: 256.900 MHz +runways: + "07": + ils: + callsign: IGSN + frequency: 109.090 MHz diff --git a/resources/airfields/MarianaIslands/tinian_intl.yaml b/resources/airfields/MarianaIslands/tinian_intl.yaml new file mode 100644 index 00000000..77069fe5 --- /dev/null +++ b/resources/airfields/MarianaIslands/tinian_intl.yaml @@ -0,0 +1,11 @@ +--- +name: Tinian Intl +id: 3 +icao: PGWT +elevation: 240 +runway_length: 7777 +atc: + hf: 3.800 MHz + vhf_low: 38.500 MHz + vhf_high: 123.650 MHz + uhf: 250.050 MHz diff --git a/resources/airfields/Nevada/beatty.yaml b/resources/airfields/Nevada/beatty.yaml new file mode 100644 index 00000000..16bff432 --- /dev/null +++ b/resources/airfields/Nevada/beatty.yaml @@ -0,0 +1,6 @@ +--- +name: Beatty +id: 5 +icao: KBTY +elevation: 3173 +runway_length: 5380 diff --git a/resources/airfields/Nevada/boulder_city.yaml b/resources/airfields/Nevada/boulder_city.yaml new file mode 100644 index 00000000..e80240ec --- /dev/null +++ b/resources/airfields/Nevada/boulder_city.yaml @@ -0,0 +1,6 @@ +--- +name: Boulder City +id: 6 +icao: KBVU +elevation: 2121 +runway_length: 4612 diff --git a/resources/airfields/Nevada/creech.yaml b/resources/airfields/Nevada/creech.yaml new file mode 100644 index 00000000..a45285e4 --- /dev/null +++ b/resources/airfields/Nevada/creech.yaml @@ -0,0 +1,19 @@ +--- +name: Creech +id: 1 +icao: KINS +elevation: 3126 +runway_length: 6100 +tacan: + callsign: INS + channel: 87X +atc: + hf: 3.825 MHz + vhf_low: 38.550 MHz + vhf_high: 118.300 MHz + uhf: 360.600 MHz +runways: + "8": + ils: + callsign: ICRR + frequency: 108.700 MHz diff --git a/resources/airfields/Nevada/echo_bay.yaml b/resources/airfields/Nevada/echo_bay.yaml new file mode 100644 index 00000000..95eea7ad --- /dev/null +++ b/resources/airfields/Nevada/echo_bay.yaml @@ -0,0 +1,14 @@ +--- +name: Echo Bay +id: 7 +icao: OL9 +elevation: 3126 +runway_length: 6100 +tacan: + callsign: INS + channel: 87X +atc: + hf: 3.825 MHz + vhf_low: 38.550 MHz + vhf_high: 118.300 MHz + uhf: 360.600 MHz diff --git a/resources/airfields/Nevada/groom_lake.yaml b/resources/airfields/Nevada/groom_lake.yaml new file mode 100644 index 00000000..781d4ea6 --- /dev/null +++ b/resources/airfields/Nevada/groom_lake.yaml @@ -0,0 +1,19 @@ +--- +name: Groom Lake +id: 2 +icao: KXTA +elevation: 4494 +runway_length: 11008 +tacan: + callsign: GRL + channel: 18X +atc: + hf: 3.850 MHz + vhf_low: 38.600 MHz + vhf_high: 118 MHz + uhf: 250.050 MHz +runways: + "32": + ils: + callsign: GLRI + frequency: 109.300 MHz diff --git a/resources/airfields/Nevada/henderson_executive.yaml b/resources/airfields/Nevada/henderson_executive.yaml new file mode 100644 index 00000000..847f26f5 --- /dev/null +++ b/resources/airfields/Nevada/henderson_executive.yaml @@ -0,0 +1,11 @@ +--- +name: Henderson Executive +id: 8 +icao: KHND +elevation: 2491 +runway_length: 5999 +atc: + hf: 3.925 MHz + vhf_low: 38.750 MHz + vhf_high: 125.100 MHz + uhf: 250.100 MHz diff --git a/resources/airfields/Nevada/jean.yaml b/resources/airfields/Nevada/jean.yaml new file mode 100644 index 00000000..9fb6317b --- /dev/null +++ b/resources/airfields/Nevada/jean.yaml @@ -0,0 +1,5 @@ +--- +name: Jean +id: 9 +elevation: 2824 +runway_length: 4053 diff --git a/resources/airfields/Nevada/laughlin.yaml b/resources/airfields/Nevada/laughlin.yaml new file mode 100644 index 00000000..9a9b6312 --- /dev/null +++ b/resources/airfields/Nevada/laughlin.yaml @@ -0,0 +1,11 @@ +--- +name: Laughlin +id: 10 +icao: KIFP +elevation: 656 +runway_length: 7139 +atc: + hf: 3.750 MHz + vhf_low: 38.400 MHz + vhf_high: 123.900 MHz + uhf: 250 MHz diff --git a/resources/airfields/Nevada/lincoln_county.yaml b/resources/airfields/Nevada/lincoln_county.yaml new file mode 100644 index 00000000..51d1631c --- /dev/null +++ b/resources/airfields/Nevada/lincoln_county.yaml @@ -0,0 +1,5 @@ +--- +name: Lincoln County +id: 11 +elevation: 4815 +runway_length: 4408 diff --git a/resources/airfields/Nevada/mccarran_international.yaml b/resources/airfields/Nevada/mccarran_international.yaml new file mode 100644 index 00000000..e4f1c429 --- /dev/null +++ b/resources/airfields/Nevada/mccarran_international.yaml @@ -0,0 +1,19 @@ +--- +name: McCarran International +id: 3 +icao: KLAS +elevation: 2169 +runway_length: 10377 +tacan: + callsign: LAS + channel: 116X +atc: + hf: 3.875 MHz + vhf_low: 38.650 MHz + vhf_high: 119.900 MHz + uhf: 257.800 MHz +runways: + "25": + ils: + callsign: I-LAS + frequency: 110.300 MHz diff --git a/resources/airfields/Nevada/mesquite.yaml b/resources/airfields/Nevada/mesquite.yaml new file mode 100644 index 00000000..9264bfbe --- /dev/null +++ b/resources/airfields/Nevada/mesquite.yaml @@ -0,0 +1,6 @@ +--- +name: Mesquite +id: 13 +icao: 67L +elevation: 1858 +runway_length: 4937 diff --git a/resources/airfields/Nevada/mina.yaml b/resources/airfields/Nevada/mina.yaml new file mode 100644 index 00000000..8b3e5dc9 --- /dev/null +++ b/resources/airfields/Nevada/mina.yaml @@ -0,0 +1,5 @@ +--- +name: Mina +id: 14 +elevation: 4562 +runway_length: 4222 diff --git a/resources/airfields/Nevada/nellis.yaml b/resources/airfields/Nevada/nellis.yaml new file mode 100644 index 00000000..d56b6db7 --- /dev/null +++ b/resources/airfields/Nevada/nellis.yaml @@ -0,0 +1,19 @@ +--- +name: Nellis +id: 4 +icao: KLSV +elevation: 1841 +runway_length: 9454 +tacan: + callsign: LSV + channel: 12X +atc: + hf: 3.900 MHz + vhf_low: 38.700 MHz + vhf_high: 132.550 MHz + uhf: 327 MHz +runways: + "21": + ils: + callsign: IDIQ + frequency: 109.100 MHz diff --git a/resources/airfields/Nevada/north_las_vegas.yaml b/resources/airfields/Nevada/north_las_vegas.yaml new file mode 100644 index 00000000..dc4fef40 --- /dev/null +++ b/resources/airfields/Nevada/north_las_vegas.yaml @@ -0,0 +1,11 @@ +--- +name: North Las Vegas +id: 15 +icao: KVGT +elevation: 2228 +runway_length: 4734 +atc: + hf: 3.775 MHz + vhf_low: 38.450 MHz + vhf_high: 125.700 MHz + uhf: 360.750 MHz diff --git a/resources/airfields/Nevada/pahute_mesa.yaml b/resources/airfields/Nevada/pahute_mesa.yaml new file mode 100644 index 00000000..159586a7 --- /dev/null +++ b/resources/airfields/Nevada/pahute_mesa.yaml @@ -0,0 +1,5 @@ +--- +name: Pahute Mesa +id: 16 +elevation: 5056 +runway_length: 5420 diff --git a/resources/airfields/Nevada/tonopah.yaml b/resources/airfields/Nevada/tonopah.yaml new file mode 100644 index 00000000..491516e5 --- /dev/null +++ b/resources/airfields/Nevada/tonopah.yaml @@ -0,0 +1,6 @@ +--- +name: Tonopah +id: 17 +icao: KTPH +elevation: 5394 +runway_length: 6715 diff --git a/resources/airfields/Nevada/tonopah_test_range.yaml b/resources/airfields/Nevada/tonopah_test_range.yaml new file mode 100644 index 00000000..a80ca463 --- /dev/null +++ b/resources/airfields/Nevada/tonopah_test_range.yaml @@ -0,0 +1,23 @@ +--- +name: Tonopah Test Range +id: 18 +icao: KTNX +elevation: 5534 +runway_length: 11633 +tacan: + callsign: TQQ + channel: 77X +atc: + hf: 3.800 MHz + vhf_low: 38.500 MHz + vhf_high: 124.750 MHz + uhf: 257.950 MHz +runways: + "14": + ils: + callsign: I-RVP + frequency: 108.300 MHz + "32": + ils: + callsign: I-UVV + frequency: 111.700 MHz diff --git a/resources/airfields/Normandy/argentan.yaml b/resources/airfields/Normandy/argentan.yaml new file mode 100644 index 00000000..86a3c4e7 --- /dev/null +++ b/resources/airfields/Normandy/argentan.yaml @@ -0,0 +1,10 @@ +--- +name: Argentan +id: 32 +elevation: 639 +runway_length: 3283 +atc: + hf: 4.350 MHz + vhf_low: 39.600 MHz + vhf_high: 119.200 MHz + uhf: 251.200 MHz diff --git a/resources/airfields/Normandy/azeville.yaml b/resources/airfields/Normandy/azeville.yaml new file mode 100644 index 00000000..64a2054f --- /dev/null +++ b/resources/airfields/Normandy/azeville.yaml @@ -0,0 +1,11 @@ +--- +name: Azeville +id: 15 +icao: A-7 +elevation: 74 +runway_length: 3357 +atc: + hf: 3.875 MHz + vhf_low: 38.650 MHz + vhf_high: 118.250 MHz + uhf: 250.250 MHz diff --git a/resources/airfields/Normandy/barville.yaml b/resources/airfields/Normandy/barville.yaml new file mode 100644 index 00000000..74663c5e --- /dev/null +++ b/resources/airfields/Normandy/barville.yaml @@ -0,0 +1,10 @@ +--- +name: Barville +id: 34 +elevation: 462 +runway_length: 3493 +atc: + hf: 4.400 MHz + vhf_low: 39.700 MHz + vhf_high: 119.300 MHz + uhf: 251.300 MHz diff --git a/resources/airfields/Normandy/bazenville.yaml b/resources/airfields/Normandy/bazenville.yaml new file mode 100644 index 00000000..12854931 --- /dev/null +++ b/resources/airfields/Normandy/bazenville.yaml @@ -0,0 +1,11 @@ +--- +name: Bazenville +id: 20 +icao: B-2 +elevation: 199 +runway_length: 3800 +atc: + hf: 4.025 MHz + vhf_low: 38.950 MHz + vhf_high: 118.550 MHz + uhf: 250.550 MHz diff --git a/resources/airfields/Normandy/beny_sur_mer.yaml b/resources/airfields/Normandy/beny_sur_mer.yaml new file mode 100644 index 00000000..50e914f3 --- /dev/null +++ b/resources/airfields/Normandy/beny_sur_mer.yaml @@ -0,0 +1,11 @@ +--- +name: Beny-sur-Mer +id: 22 +icao: B-4 +elevation: 199 +runway_length: 3155 +atc: + hf: 4.075 MHz + vhf_low: 39.050 MHz + vhf_high: 118.650 MHz + uhf: 250.650 MHz diff --git a/resources/airfields/Normandy/beuzeville.yaml b/resources/airfields/Normandy/beuzeville.yaml new file mode 100644 index 00000000..19988191 --- /dev/null +++ b/resources/airfields/Normandy/beuzeville.yaml @@ -0,0 +1,11 @@ +--- +name: Beuzeville +id: 14 +icao: A-6 +elevation: 114 +runway_length: 3840 +atc: + hf: 3.850 MHz + vhf_low: 38.600 MHz + vhf_high: 118.200 MHz + uhf: 250.200 MHz diff --git a/resources/airfields/Normandy/biniville.yaml b/resources/airfields/Normandy/biniville.yaml new file mode 100644 index 00000000..ace4ef16 --- /dev/null +++ b/resources/airfields/Normandy/biniville.yaml @@ -0,0 +1,11 @@ +--- +name: Biniville +id: 10 +icao: A-24 +elevation: 106 +runway_length: 3283 +atc: + hf: 3.750 MHz + vhf_low: 38.400 MHz + vhf_high: 118 MHz + uhf: 250 MHz diff --git a/resources/airfields/Normandy/brucheville.yaml b/resources/airfields/Normandy/brucheville.yaml new file mode 100644 index 00000000..c644d309 --- /dev/null +++ b/resources/airfields/Normandy/brucheville.yaml @@ -0,0 +1,11 @@ +--- +name: Brucheville +id: 5 +icao: A-16 +elevation: 45 +runway_length: 3413 +atc: + hf: 4.575 MHz + vhf_low: 40.050 MHz + vhf_high: 119.650 MHz + uhf: 251.650 MHz diff --git a/resources/airfields/Normandy/cardonville.yaml b/resources/airfields/Normandy/cardonville.yaml new file mode 100644 index 00000000..03b1005c --- /dev/null +++ b/resources/airfields/Normandy/cardonville.yaml @@ -0,0 +1,11 @@ +--- +name: Cardonville +id: 11 +icao: A-3 +elevation: 101 +runway_length: 4541 +atc: + hf: 3.775 MHz + vhf_low: 38.450 MHz + vhf_high: 118.050 MHz + uhf: 250.050 MHz diff --git a/resources/airfields/Normandy/carpiquet.yaml b/resources/airfields/Normandy/carpiquet.yaml new file mode 100644 index 00000000..4b3b0500 --- /dev/null +++ b/resources/airfields/Normandy/carpiquet.yaml @@ -0,0 +1,11 @@ +--- +name: Carpiquet +id: 19 +icao: B-17 +elevation: 187 +runway_length: 3799 +atc: + hf: 3.975 MHz + vhf_low: 38.850 MHz + vhf_high: 118.450 MHz + uhf: 250.450 MHz diff --git a/resources/airfields/Normandy/chailey.yaml b/resources/airfields/Normandy/chailey.yaml new file mode 100644 index 00000000..3c8eca0f --- /dev/null +++ b/resources/airfields/Normandy/chailey.yaml @@ -0,0 +1,10 @@ +--- +name: Chailey +id: 27 +elevation: 134 +runway_length: 5080 +atc: + hf: 4.200 MHz + vhf_low: 39.300 MHz + vhf_high: 118.900 MHz + uhf: 250.900 MHz diff --git a/resources/airfields/Normandy/chippelle.yaml b/resources/airfields/Normandy/chippelle.yaml new file mode 100644 index 00000000..02a48e64 --- /dev/null +++ b/resources/airfields/Normandy/chippelle.yaml @@ -0,0 +1,11 @@ +--- +name: Chippelle +id: 13 +icao: A-5 +elevation: 124 +runway_length: 4643 +atc: + hf: 3.825 MHz + vhf_low: 38.550 MHz + vhf_high: 118.150 MHz + uhf: 250.150 MHz diff --git a/resources/airfields/Normandy/conches.yaml b/resources/airfields/Normandy/conches.yaml new file mode 100644 index 00000000..f0a340af --- /dev/null +++ b/resources/airfields/Normandy/conches.yaml @@ -0,0 +1,10 @@ +--- +name: Conches +id: 40 +elevation: 541 +runway_length: 4199 +atc: + hf: 4.525 MHz + vhf_low: 39.950 MHz + vhf_high: 119.550 MHz + uhf: 251.550 MHz diff --git a/resources/airfields/Normandy/cretteville.yaml b/resources/airfields/Normandy/cretteville.yaml new file mode 100644 index 00000000..ec5607be --- /dev/null +++ b/resources/airfields/Normandy/cretteville.yaml @@ -0,0 +1,11 @@ +--- +name: Cretteville +id: 3 +icao: A-14 +elevation: 95 +runway_length: 4594 +atc: + hf: 4.500 MHz + vhf_low: 39.900 MHz + vhf_high: 119.500 MHz + uhf: 251.500 MHz diff --git a/resources/airfields/Normandy/cricqueville_en_bessin.yaml b/resources/airfields/Normandy/cricqueville_en_bessin.yaml new file mode 100644 index 00000000..f52f4e92 --- /dev/null +++ b/resources/airfields/Normandy/cricqueville_en_bessin.yaml @@ -0,0 +1,11 @@ +--- +name: Cricqueville-en-Bessin +id: 7 +icao: A-2 +elevation: 81 +runway_length: 3459 +atc: + hf: 4.625 MHz + vhf_low: 40.150 MHz + vhf_high: 119.750 MHz + uhf: 251.750 MHz diff --git a/resources/airfields/Normandy/deux_jumeaux.yaml b/resources/airfields/Normandy/deux_jumeaux.yaml new file mode 100644 index 00000000..d1909a76 --- /dev/null +++ b/resources/airfields/Normandy/deux_jumeaux.yaml @@ -0,0 +1,11 @@ +--- +name: Deux Jumeaux +id: 12 +icao: A-4 +elevation: 123 +runway_length: 4628 +atc: + hf: 3.800 MHz + vhf_low: 38.500 MHz + vhf_high: 118.100 MHz + uhf: 250.100 MHz diff --git a/resources/airfields/Normandy/essay.yaml b/resources/airfields/Normandy/essay.yaml new file mode 100644 index 00000000..36bddf37 --- /dev/null +++ b/resources/airfields/Normandy/essay.yaml @@ -0,0 +1,10 @@ +--- +name: Essay +id: 35 +elevation: 507 +runway_length: 3283 +atc: + hf: 4.425 MHz + vhf_low: 39.750 MHz + vhf_high: 119.350 MHz + uhf: 251.350 MHz diff --git a/resources/airfields/Normandy/evreux.yaml b/resources/airfields/Normandy/evreux.yaml new file mode 100644 index 00000000..ee1c3bcf --- /dev/null +++ b/resources/airfields/Normandy/evreux.yaml @@ -0,0 +1,10 @@ +--- +name: Evreux +id: 26 +elevation: 423 +runway_length: 4296 +atc: + hf: 4.175 MHz + vhf_low: 39.250 MHz + vhf_high: 118.850 MHz + uhf: 250.850 MHz diff --git a/resources/airfields/Normandy/ford_ab.yaml b/resources/airfields/Normandy/ford_ab.yaml new file mode 100644 index 00000000..aa9fe606 --- /dev/null +++ b/resources/airfields/Normandy/ford_ab.yaml @@ -0,0 +1,10 @@ +--- +name: Ford AB +id: 31 +elevation: 29 +runway_length: 4296 +atc: + hf: 4.325 MHz + vhf_low: 39.550 MHz + vhf_high: 119.150 MHz + uhf: 251.150 MHz diff --git a/resources/airfields/Normandy/funtington.yaml b/resources/airfields/Normandy/funtington.yaml new file mode 100644 index 00000000..dfff0dd1 --- /dev/null +++ b/resources/airfields/Normandy/funtington.yaml @@ -0,0 +1,10 @@ +--- +name: Funtington +id: 29 +elevation: 164 +runway_length: 5080 +atc: + hf: 4.250 MHz + vhf_low: 39.400 MHz + vhf_high: 119 MHz + uhf: 251 MHz diff --git a/resources/airfields/Normandy/goulet.yaml b/resources/airfields/Normandy/goulet.yaml new file mode 100644 index 00000000..90507472 --- /dev/null +++ b/resources/airfields/Normandy/goulet.yaml @@ -0,0 +1,10 @@ +--- +name: Goulet +id: 33 +elevation: 616 +runway_length: 3283 +atc: + hf: 4.375 MHz + vhf_low: 39.650 MHz + vhf_high: 119.250 MHz + uhf: 251.250 MHz diff --git a/resources/airfields/Normandy/hauterive.yaml b/resources/airfields/Normandy/hauterive.yaml new file mode 100644 index 00000000..52daec32 --- /dev/null +++ b/resources/airfields/Normandy/hauterive.yaml @@ -0,0 +1,10 @@ +--- +name: Hauterive +id: 36 +elevation: 476 +runway_length: 3283 +atc: + hf: 4.450 MHz + vhf_low: 39.800 MHz + vhf_high: 119.400 MHz + uhf: 251.400 MHz diff --git a/resources/airfields/Normandy/lantheuil.yaml b/resources/airfields/Normandy/lantheuil.yaml new file mode 100644 index 00000000..0f1e96a0 --- /dev/null +++ b/resources/airfields/Normandy/lantheuil.yaml @@ -0,0 +1,11 @@ +--- +name: Lantheuil +id: 25 +icao: B-9 +elevation: 174 +runway_length: 3597 +atc: + hf: 4.150 MHz + vhf_low: 39.200 MHz + vhf_high: 118.800 MHz + uhf: 250.800 MHz diff --git a/resources/airfields/Normandy/le_molay.yaml b/resources/airfields/Normandy/le_molay.yaml new file mode 100644 index 00000000..c0c20683 --- /dev/null +++ b/resources/airfields/Normandy/le_molay.yaml @@ -0,0 +1,11 @@ +--- +name: Le Molay +id: 17 +icao: A-9 +elevation: 104 +runway_length: 3840 +atc: + hf: 3.925 MHz + vhf_low: 38.750 MHz + vhf_high: 118.350 MHz + uhf: 250.350 MHz diff --git a/resources/airfields/Normandy/lessay.yaml b/resources/airfields/Normandy/lessay.yaml new file mode 100644 index 00000000..97c29be0 --- /dev/null +++ b/resources/airfields/Normandy/lessay.yaml @@ -0,0 +1,11 @@ +--- +name: Lessay +id: 8 +icao: A-20 +elevation: 65 +runway_length: 5080 +atc: + hf: 4.650 MHz + vhf_low: 40.200 MHz + vhf_high: 119.800 MHz + uhf: 251.800 MHz diff --git a/resources/airfields/Normandy/lignerolles.yaml b/resources/airfields/Normandy/lignerolles.yaml new file mode 100644 index 00000000..e1760aa4 --- /dev/null +++ b/resources/airfields/Normandy/lignerolles.yaml @@ -0,0 +1,11 @@ +--- +name: Lignerolles +id: 2 +icao: A-12 +elevation: 404 +runway_length: 3436 +atc: + hf: 4.275 MHz + vhf_low: 39.450 MHz + vhf_high: 119.050 MHz + uhf: 251.050 MHz diff --git a/resources/airfields/Normandy/longues_sur_mer.yaml b/resources/airfields/Normandy/longues_sur_mer.yaml new file mode 100644 index 00000000..9a470d60 --- /dev/null +++ b/resources/airfields/Normandy/longues_sur_mer.yaml @@ -0,0 +1,11 @@ +--- +name: Longues-sur-Mer +id: 18 +icao: B-11 +elevation: 225 +runway_length: 3155 +atc: + hf: 3.950 MHz + vhf_low: 38.800 MHz + vhf_high: 118.400 MHz + uhf: 250.400 MHz diff --git a/resources/airfields/Normandy/maupertus.yaml b/resources/airfields/Normandy/maupertus.yaml new file mode 100644 index 00000000..ed12c136 --- /dev/null +++ b/resources/airfields/Normandy/maupertus.yaml @@ -0,0 +1,11 @@ +--- +name: Maupertus +id: 4 +icao: A-15 +elevation: 441 +runway_length: 4666 +atc: + hf: 4.550 MHz + vhf_low: 40 MHz + vhf_high: 119.600 MHz + uhf: 251.600 MHz diff --git a/resources/airfields/Normandy/meautis.yaml b/resources/airfields/Normandy/meautis.yaml new file mode 100644 index 00000000..c8259478 --- /dev/null +++ b/resources/airfields/Normandy/meautis.yaml @@ -0,0 +1,11 @@ +--- +name: Meautis +id: 6 +icao: A-17 +elevation: 83 +runway_length: 3840 +atc: + hf: 4.600 MHz + vhf_low: 40.100 MHz + vhf_high: 119.700 MHz + uhf: 251.700 MHz diff --git a/resources/airfields/Normandy/needs_oar_point.yaml b/resources/airfields/Normandy/needs_oar_point.yaml new file mode 100644 index 00000000..d9c6de84 --- /dev/null +++ b/resources/airfields/Normandy/needs_oar_point.yaml @@ -0,0 +1,10 @@ +--- +name: Needs Oar Point +id: 28 +elevation: 30 +runway_length: 5259 +atc: + hf: 4.225 MHz + vhf_low: 39.350 MHz + vhf_high: 118.950 MHz + uhf: 250.950 MHz diff --git a/resources/airfields/Normandy/picauville.yaml b/resources/airfields/Normandy/picauville.yaml new file mode 100644 index 00000000..4b8f8181 --- /dev/null +++ b/resources/airfields/Normandy/picauville.yaml @@ -0,0 +1,11 @@ +--- +name: Picauville +id: 16 +icao: A-8 +elevation: 72 +runway_length: 3840 +atc: + hf: 3.900 MHz + vhf_low: 38.700 MHz + vhf_high: 118.300 MHz + uhf: 250.300 MHz diff --git a/resources/airfields/Normandy/rucqueville.yaml b/resources/airfields/Normandy/rucqueville.yaml new file mode 100644 index 00000000..44f73cef --- /dev/null +++ b/resources/airfields/Normandy/rucqueville.yaml @@ -0,0 +1,11 @@ +--- +name: Rucqueville +id: 23 +icao: B-7 +elevation: 192 +runway_length: 4561 +atc: + hf: 4.100 MHz + vhf_low: 39.100 MHz + vhf_high: 118.700 MHz + uhf: 250.700 MHz diff --git a/resources/airfields/Normandy/saint_pierre_du_mont.yaml b/resources/airfields/Normandy/saint_pierre_du_mont.yaml new file mode 100644 index 00000000..17dccbc9 --- /dev/null +++ b/resources/airfields/Normandy/saint_pierre_du_mont.yaml @@ -0,0 +1,11 @@ +--- +name: Saint Pierre du Mont +id: 1 +icao: A-1 +elevation: 103 +runway_length: 4737 +atc: + hf: 4 MHz + vhf_low: 38.900 MHz + vhf_high: 118.500 MHz + uhf: 250.500 MHz diff --git a/resources/airfields/Normandy/sainte_croix_sur_mer.yaml b/resources/airfields/Normandy/sainte_croix_sur_mer.yaml new file mode 100644 index 00000000..9a247cf7 --- /dev/null +++ b/resources/airfields/Normandy/sainte_croix_sur_mer.yaml @@ -0,0 +1,11 @@ +--- +name: Sainte-Croix-sur-Mer +id: 21 +icao: B-3 +elevation: 160 +runway_length: 3840 +atc: + hf: 4.050 MHz + vhf_low: 39 MHz + vhf_high: 118.600 MHz + uhf: 250.600 MHz diff --git a/resources/airfields/Normandy/sainte_laurent_sur_mer.yaml b/resources/airfields/Normandy/sainte_laurent_sur_mer.yaml new file mode 100644 index 00000000..f77f9515 --- /dev/null +++ b/resources/airfields/Normandy/sainte_laurent_sur_mer.yaml @@ -0,0 +1,11 @@ +--- +name: Sainte-Laurent-sur-Mer +id: 9 +icao: A-21 +elevation: 145 +runway_length: 4561 +atc: + hf: 4.675 MHz + vhf_low: 40.250 MHz + vhf_high: 119.850 MHz + uhf: 251.850 MHz diff --git a/resources/airfields/Normandy/sommervieu.yaml b/resources/airfields/Normandy/sommervieu.yaml new file mode 100644 index 00000000..348ffebe --- /dev/null +++ b/resources/airfields/Normandy/sommervieu.yaml @@ -0,0 +1,11 @@ +--- +name: Sommervieu +id: 24 +icao: B-8 +elevation: 186 +runway_length: 3840 +atc: + hf: 4.125 MHz + vhf_low: 39.150 MHz + vhf_high: 118.750 MHz + uhf: 250.750 MHz diff --git a/resources/airfields/Normandy/tangmere.yaml b/resources/airfields/Normandy/tangmere.yaml new file mode 100644 index 00000000..e90923d4 --- /dev/null +++ b/resources/airfields/Normandy/tangmere.yaml @@ -0,0 +1,10 @@ +--- +name: Tangmere +id: 30 +elevation: 47 +runway_length: 4296 +atc: + hf: 4.300 MHz + vhf_low: 39.500 MHz + vhf_high: 119.100 MHz + uhf: 251.100 MHz diff --git a/resources/airfields/Normandy/vrigny.yaml b/resources/airfields/Normandy/vrigny.yaml new file mode 100644 index 00000000..306f5714 --- /dev/null +++ b/resources/airfields/Normandy/vrigny.yaml @@ -0,0 +1,10 @@ +--- +name: Vrigny +id: 38 +elevation: 590 +runway_length: 3283 +atc: + hf: 4.475 MHz + vhf_low: 39.850 MHz + vhf_high: 119.450 MHz + uhf: 251.450 MHz diff --git a/resources/airfields/PersianGulf/abu_dhabi_intl.yaml b/resources/airfields/PersianGulf/abu_dhabi_intl.yaml new file mode 100644 index 00000000..37dff8db --- /dev/null +++ b/resources/airfields/PersianGulf/abu_dhabi_intl.yaml @@ -0,0 +1,14 @@ +--- +name: Abu Dhabi Intl +id: 22 +icao: OMAA +elevation: 91 +runway_length: 12817 +vor: + callsign: ADV + frequency: 114.250 MHz +atc: + hf: 4.050 MHz + vhf_low: 119.200 MHz + vhf_high: 39 MHz + uhf: 250.550 MHz diff --git a/resources/airfields/PersianGulf/abu_musa_island.yaml b/resources/airfields/PersianGulf/abu_musa_island.yaml new file mode 100644 index 00000000..84ebcb74 --- /dev/null +++ b/resources/airfields/PersianGulf/abu_musa_island.yaml @@ -0,0 +1,11 @@ +--- +name: Abu Musa Island +id: 1 +icao: OIBA +elevation: 16 +runway_length: 7616 +atc: + hf: 3.950 MHz + vhf_low: 122.900 MHz + vhf_high: 38.800 MHz + uhf: 250.400 MHz diff --git a/resources/airfields/PersianGulf/al_ain_intl.yaml b/resources/airfields/PersianGulf/al_ain_intl.yaml new file mode 100644 index 00000000..b0081f62 --- /dev/null +++ b/resources/airfields/PersianGulf/al_ain_intl.yaml @@ -0,0 +1,14 @@ +--- +name: Al Ain Intl +id: 25 +icao: OMAL +elevation: 813 +runway_length: 11267 +vor: + callsign: ALN + frequency: 112.600 MHz +atc: + hf: 4.125 MHz + vhf_low: 119.850 MHz + vhf_high: 39.150 MHz + uhf: 250.700 MHz diff --git a/resources/airfields/PersianGulf/al_bateen.yaml b/resources/airfields/PersianGulf/al_bateen.yaml new file mode 100644 index 00000000..a9cb31d6 --- /dev/null +++ b/resources/airfields/PersianGulf/al_bateen.yaml @@ -0,0 +1,14 @@ +--- +name: Al-Bateen +id: 23 +icao: OMAD +elevation: 11 +runway_length: 6808 +vor: + callsign: ALB + frequency: 114 MHz +atc: + hf: 4.075 MHz + vhf_low: 119.900 MHz + vhf_high: 39.050 MHz + uhf: 250.600 MHz diff --git a/resources/airfields/PersianGulf/al_dhafra_afb.yaml b/resources/airfields/PersianGulf/al_dhafra_afb.yaml new file mode 100644 index 00000000..53376126 --- /dev/null +++ b/resources/airfields/PersianGulf/al_dhafra_afb.yaml @@ -0,0 +1,26 @@ +--- +name: Al Dhafra AFB +id: 4 +icao: OMAM +elevation: 52 +runway_length: 11530 +tacan: + callsign: MA + channel: 96X +vor: + callsign: MA + frequency: 114.900 MHz +atc: + hf: 4.300 MHz + vhf_low: 126.500 MHz + vhf_high: 39.500 MHz + uhf: 251.100 MHz +runways: + "31": + ils: + callsign: IMA + frequency: 109.100 MHz + "13": + ils: + callsign: MMA + frequency: 111.100 MHz diff --git a/resources/airfields/PersianGulf/al_maktoum_intl.yaml b/resources/airfields/PersianGulf/al_maktoum_intl.yaml new file mode 100644 index 00000000..89c2b5f4 --- /dev/null +++ b/resources/airfields/PersianGulf/al_maktoum_intl.yaml @@ -0,0 +1,20 @@ +--- +name: Al Maktoum Intl +id: 6 +icao: OMDW +elevation: 123 +runway_length: 11500 +atc: + hf: 4.350 MHz + vhf_low: 118.600 MHz + vhf_high: 39.600 MHz + uhf: 251.200 MHz +runways: + "12": + ils: + callsign: IMA + frequency: 111.750 MHz + "30": + ils: + callsign: IJWA + frequency: 109.750 MHz diff --git a/resources/airfields/PersianGulf/al_minhad_afb.yaml b/resources/airfields/PersianGulf/al_minhad_afb.yaml new file mode 100644 index 00000000..7566ea23 --- /dev/null +++ b/resources/airfields/PersianGulf/al_minhad_afb.yaml @@ -0,0 +1,23 @@ +--- +name: Al Minhad AFB +id: 12 +icao: OMDM +elevation: 190 +runway_length: 11865 +tacan: + callsign: MIN + channel: 99X +atc: + hf: 3.800 MHz + vhf_low: 118.550 MHz + vhf_high: 38.500 MHz + uhf: 250.100 MHz +runways: + "27": + ils: + callsign: IMNR + frequency: 110.750 MHz + "9": + ils: + callsign: IMNW + frequency: 110.700 MHz diff --git a/resources/airfields/PersianGulf/bandar_abbas_intl.yaml b/resources/airfields/PersianGulf/bandar_abbas_intl.yaml new file mode 100644 index 00000000..1f6b130b --- /dev/null +++ b/resources/airfields/PersianGulf/bandar_abbas_intl.yaml @@ -0,0 +1,22 @@ +--- +name: Bandar Abbas Intl +id: 2 +icao: OIKB +elevation: 18 +runway_length: 11640 +tacan: + callsign: BND + channel: 78X +vor: + callsign: BND + frequency: 117.200 MHz +atc: + hf: 4.250 MHz + vhf_low: 118.100 MHz + vhf_high: 39.400 MHz + uhf: 251 MHz +runways: + "21": + ils: + callsign: IBND + frequency: 109.900 MHz diff --git a/resources/airfields/PersianGulf/bandar_e_jask.yaml b/resources/airfields/PersianGulf/bandar_e_jask.yaml new file mode 100644 index 00000000..be0406b9 --- /dev/null +++ b/resources/airfields/PersianGulf/bandar_e_jask.yaml @@ -0,0 +1,14 @@ +--- +name: Bandar-e-Jask +id: 21 +icao: OIZJ +elevation: 26 +runway_length: 6842 +vor: + callsign: KHM + frequency: 116.300 MHz +atc: + hf: 4.025 MHz + vhf_low: 118.150 MHz + vhf_high: 38.950 MHz + uhf: 250.500 MHz diff --git a/resources/airfields/PersianGulf/bandar_lengeh.yaml b/resources/airfields/PersianGulf/bandar_lengeh.yaml new file mode 100644 index 00000000..810e237d --- /dev/null +++ b/resources/airfields/PersianGulf/bandar_lengeh.yaml @@ -0,0 +1,14 @@ +--- +name: Bandar Lengeh +id: 3 +icao: OIBL +elevation: 80 +runway_length: 7625 +vor: + callsign: LEN + frequency: 114.800 MHz +atc: + hf: 4.275 MHz + vhf_low: 121.700 MHz + vhf_high: 39.450 MHz + uhf: 251.050 MHz diff --git a/resources/airfields/PersianGulf/dubai_intl.yaml b/resources/airfields/PersianGulf/dubai_intl.yaml new file mode 100644 index 00000000..88ccc32d --- /dev/null +++ b/resources/airfields/PersianGulf/dubai_intl.yaml @@ -0,0 +1,20 @@ +--- +name: Dubai Intl +id: 5 +icao: OMDB +elevation: 16 +runway_length: 11018 +atc: + hf: 4.325 MHz + vhf_low: 118.750 MHz + vhf_high: 39.550 MHz + uhf: 251.150 MHz +runways: + "12": + ils: + callsign: IDBR + frequency: 110.100 MHz + "30": + ils: + callsign: IDBL + frequency: 110.900 MHz diff --git a/resources/airfields/PersianGulf/fujairah_intl.yaml b/resources/airfields/PersianGulf/fujairah_intl.yaml new file mode 100644 index 00000000..af1b5cf9 --- /dev/null +++ b/resources/airfields/PersianGulf/fujairah_intl.yaml @@ -0,0 +1,19 @@ +--- +name: Fujairah Intl +id: 7 +icao: OMFJ +elevation: 60 +runway_length: 9437 +vor: + callsign: FJV + frequency: 113.800 MHz +atc: + hf: 4.375 MHz + vhf_low: 124.600 MHz + vhf_high: 39.650 MHz + uhf: 251.250 MHz +runways: + "29": + ils: + callsign: IFJR + frequency: 111.500 MHz diff --git a/resources/airfields/PersianGulf/havadarya.yaml b/resources/airfields/PersianGulf/havadarya.yaml new file mode 100644 index 00000000..0638412d --- /dev/null +++ b/resources/airfields/PersianGulf/havadarya.yaml @@ -0,0 +1,19 @@ +--- +name: Havadarya +id: 9 +icao: OIKP +elevation: 50 +runway_length: 7300 +tacan: + callsign: HDR + channel: 47X +atc: + hf: 4.400 MHz + vhf_low: 123.150 MHz + vhf_high: 39.700 MHz + uhf: 251.300 MHz +runways: + "8": + ils: + callsign: IBHD + frequency: 108.900 MHz diff --git a/resources/airfields/PersianGulf/jiroft.yaml b/resources/airfields/PersianGulf/jiroft.yaml new file mode 100644 index 00000000..0427bd6d --- /dev/null +++ b/resources/airfields/PersianGulf/jiroft.yaml @@ -0,0 +1,11 @@ +--- +name: Jiroft +id: 27 +icao: OIKJ +elevation: 2664 +runway_length: 9160 +atc: + hf: 4.125 MHz + vhf_low: 136 MHz + vhf_high: 39.120 MHz + uhf: 250.750 MHz diff --git a/resources/airfields/PersianGulf/kerman.yaml b/resources/airfields/PersianGulf/kerman.yaml new file mode 100644 index 00000000..cb9fa0a0 --- /dev/null +++ b/resources/airfields/PersianGulf/kerman.yaml @@ -0,0 +1,17 @@ +--- +name: Kerman +id: 18 +icao: OIKK +elevation: 5746 +runway_length: 11981 +tacan: + callsign: KER + channel: 97X +vor: + callsign: KER + frequency: 112 MHz +atc: + hf: 3.925 MHz + vhf_low: 118.250 MHz + vhf_high: 38.750 MHz + uhf: 250.300 MHz diff --git a/resources/airfields/PersianGulf/khasab.yaml b/resources/airfields/PersianGulf/khasab.yaml new file mode 100644 index 00000000..3dff5ecc --- /dev/null +++ b/resources/airfields/PersianGulf/khasab.yaml @@ -0,0 +1,16 @@ +--- +name: Khasab +id: 10 +icao: OOKB +elevation: 47 +runway_length: 7513 +atc: + hf: 3.750 MHz + vhf_low: 124.350 MHz + vhf_high: 38.400 MHz + uhf: 250 MHz +runways: + "19": + ils: + callsign: IBKS + frequency: 110.300 MHz diff --git a/resources/airfields/PersianGulf/kish_intl.yaml b/resources/airfields/PersianGulf/kish_intl.yaml new file mode 100644 index 00000000..906b97a6 --- /dev/null +++ b/resources/airfields/PersianGulf/kish_intl.yaml @@ -0,0 +1,14 @@ +--- +name: Kish Intl +id: 24 +icao: OIBK +elevation: 114 +runway_length: 10617 +tacan: + callsign: KIH + channel: 112X +atc: + hf: 4.100 MHz + vhf_low: 121.650 MHz + vhf_high: 39.100 MHz + uhf: 250.650 MHz diff --git a/resources/airfields/PersianGulf/lar.yaml b/resources/airfields/PersianGulf/lar.yaml new file mode 100644 index 00000000..1252894b --- /dev/null +++ b/resources/airfields/PersianGulf/lar.yaml @@ -0,0 +1,14 @@ +--- +name: Lar +id: 11 +icao: OISL +elevation: 2635 +runway_length: 9600 +vor: + callsign: LAR + frequency: 117.900 MHz +atc: + hf: 3.775 MHz + vhf_low: 127.350 MHz + vhf_high: 38.450 MHz + uhf: 250.050 MHz diff --git a/resources/airfields/PersianGulf/lavan_island.yaml b/resources/airfields/PersianGulf/lavan_island.yaml new file mode 100644 index 00000000..37661d5a --- /dev/null +++ b/resources/airfields/PersianGulf/lavan_island.yaml @@ -0,0 +1,14 @@ +--- +name: Lavan Island +id: 26 +icao: OIBV +elevation: 75 +runway_length: 8234 +vor: + callsign: LVA + frequency: 116.850 MHz +atc: + hf: 4.150 MHz + vhf_low: 128.550 MHz + vhf_high: 39.200 MHz + uhf: 250.750 MHz diff --git a/resources/airfields/PersianGulf/liwa_afb.yaml b/resources/airfields/PersianGulf/liwa_afb.yaml new file mode 100644 index 00000000..a23e18e5 --- /dev/null +++ b/resources/airfields/PersianGulf/liwa_afb.yaml @@ -0,0 +1,17 @@ +--- +name: Liwa AFB +id: 29 +icao: OMLW +elevation: 400 +runway_length: 10768 +tacan: + callsign: OMLW + channel: 121X +vor: + callsign: OMLW + frequency: 117.400 MHz +atc: + hf: 4.225 MHz + vhf_low: 119.300 MHz + vhf_high: 39.350 MHz + uhf: 250.950 MHz diff --git a/resources/airfields/PersianGulf/qeshm_island.yaml b/resources/airfields/PersianGulf/qeshm_island.yaml new file mode 100644 index 00000000..39a3b9f2 --- /dev/null +++ b/resources/airfields/PersianGulf/qeshm_island.yaml @@ -0,0 +1,14 @@ +--- +name: Qeshm Island +id: 13 +icao: OIKQ +elevation: 26 +runway_length: 13287 +vor: + callsign: KHM + frequency: 117.100 MHz +atc: + hf: 3.825 MHz + vhf_low: 118.050 MHz + vhf_high: 38.550 MHz + uhf: 250.150 MHz diff --git a/resources/airfields/PersianGulf/ras_al_khaimah_intl.yaml b/resources/airfields/PersianGulf/ras_al_khaimah_intl.yaml new file mode 100644 index 00000000..c5492f44 --- /dev/null +++ b/resources/airfields/PersianGulf/ras_al_khaimah_intl.yaml @@ -0,0 +1,14 @@ +--- +name: Ras Al Khaimah Intl +id: 28 +icao: OMRK +elevation: 70 +runway_length: 8406 +vor: + callsign: OMRK + frequency: 113.600 MHz +atc: + hf: 4.200 MHz + vhf_low: 121.600 MHz + vhf_high: 39.300 MHz + uhf: 250.900 MHz diff --git a/resources/airfields/PersianGulf/sas_al_nakheel.yaml b/resources/airfields/PersianGulf/sas_al_nakheel.yaml new file mode 100644 index 00000000..c27c6a2b --- /dev/null +++ b/resources/airfields/PersianGulf/sas_al_nakheel.yaml @@ -0,0 +1,14 @@ +--- +name: Sas Al Nakheel +id: 20 +icao: OMNK +elevation: 9 +runway_length: 5387 +vor: + callsign: SAS + frequency: 128.930 MHz +atc: + hf: 4 MHz + vhf_low: 128.900 MHz + vhf_high: 38.900 MHz + uhf: 250.450 MHz diff --git a/resources/airfields/PersianGulf/sharjah_intl.yaml b/resources/airfields/PersianGulf/sharjah_intl.yaml new file mode 100644 index 00000000..f194df31 --- /dev/null +++ b/resources/airfields/PersianGulf/sharjah_intl.yaml @@ -0,0 +1,20 @@ +--- +name: Sharjah Intl +id: 14 +icao: OMSJ +elevation: 98 +runway_length: 10535 +atc: + hf: 3.850 MHz + vhf_low: 118.600 MHz + vhf_high: 38.600 MHz + uhf: 250.200 MHz +runways: + "12": + ils: + callsign: ISRE + frequency: 108.550 MHz + "30": + ils: + callsign: ISHW + frequency: 111.950 MHz diff --git a/resources/airfields/PersianGulf/shiraz_intl.yaml b/resources/airfields/PersianGulf/shiraz_intl.yaml new file mode 100644 index 00000000..c4e557df --- /dev/null +++ b/resources/airfields/PersianGulf/shiraz_intl.yaml @@ -0,0 +1,17 @@ +--- +name: Shiraz Intl +id: 19 +icao: OISS +elevation: 4878 +runway_length: 13271 +tacan: + callsign: SYZ1 + channel: 94X +vor: + callsign: SYZ + frequency: 112 MHz +atc: + hf: 3.950 MHz + vhf_low: 121.900 MHz + vhf_high: 38.800 MHz + uhf: 250.350 MHz diff --git a/resources/airfields/PersianGulf/sir_abu_nuayr.yaml b/resources/airfields/PersianGulf/sir_abu_nuayr.yaml new file mode 100644 index 00000000..6af3e704 --- /dev/null +++ b/resources/airfields/PersianGulf/sir_abu_nuayr.yaml @@ -0,0 +1,11 @@ +--- +name: Sir Abu Nuayr +id: 17 +icao: OMSN +elevation: 25 +runway_length: 2229 +atc: + hf: 3.900 MHz + vhf_low: 118 MHz + vhf_high: 38.700 MHz + uhf: 250.800 MHz diff --git a/resources/airfields/PersianGulf/sirri_island.yaml b/resources/airfields/PersianGulf/sirri_island.yaml new file mode 100644 index 00000000..4d8df1ab --- /dev/null +++ b/resources/airfields/PersianGulf/sirri_island.yaml @@ -0,0 +1,14 @@ +--- +name: Sirri Island +id: 15 +icao: OIBS +elevation: 17 +runway_length: 7443 +vor: + callsign: SIR + frequency: 113.750 MHz +atc: + hf: 3.875 MHz + vhf_low: 135.050 MHz + vhf_high: 38.650 MHz + uhf: 250.250 MHz diff --git a/resources/airfields/PersianGulf/tunb_island_afb.yaml b/resources/airfields/PersianGulf/tunb_island_afb.yaml new file mode 100644 index 00000000..0af650d4 --- /dev/null +++ b/resources/airfields/PersianGulf/tunb_island_afb.yaml @@ -0,0 +1,6 @@ +--- +name: Tunb Island AFB +id: 8 +icao: OIGI +elevation: 42 +runway_length: 6099 diff --git a/resources/airfields/PersianGulf/tunb_kochak.yaml b/resources/airfields/PersianGulf/tunb_kochak.yaml new file mode 100644 index 00000000..28ec6228 --- /dev/null +++ b/resources/airfields/PersianGulf/tunb_kochak.yaml @@ -0,0 +1,9 @@ +--- +name: Tunb Kochak +id: 16 +icao: OITK +elevation: 15 +runway_length: 1481 +tacan: + callsign: KCK + channel: 89X diff --git a/resources/airfields/Syria/abu_al_duhur.yaml b/resources/airfields/Syria/abu_al_duhur.yaml new file mode 100644 index 00000000..4c564b64 --- /dev/null +++ b/resources/airfields/Syria/abu_al_duhur.yaml @@ -0,0 +1,11 @@ +--- +name: Abu al-Duhur +id: 1 +icao: OS57 +elevation: 820 +runway_length: 8728 +atc: + hf: 4 MHz + vhf_low: 122.200 MHz + vhf_high: 38.900 MHz + uhf: 250.450 MHz diff --git a/resources/airfields/Syria/adana_sakirpasa.yaml b/resources/airfields/Syria/adana_sakirpasa.yaml new file mode 100644 index 00000000..7ad2af78 --- /dev/null +++ b/resources/airfields/Syria/adana_sakirpasa.yaml @@ -0,0 +1,19 @@ +--- +name: Adana Sakirpasa +id: 2 +icao: LTAF +elevation: 55 +runway_length: 8115 +vor: + callsign: ADA + frequency: 112.700 MHz +atc: + hf: 4.275 MHz + vhf_low: 121.100 MHz + vhf_high: 39.450 MHz + uhf: 251 MHz +runways: + "05": + ils: + callsign: IADA + frequency: 108.700 MHz diff --git a/resources/airfields/Syria/akrotiri.yaml b/resources/airfields/Syria/akrotiri.yaml new file mode 100644 index 00000000..7c45c69b --- /dev/null +++ b/resources/airfields/Syria/akrotiri.yaml @@ -0,0 +1,22 @@ +--- +name: Akrotiri +id: 44 +icao: LCRA +elevation: 62 +runway_length: 8276 +tacan: + callsign: AKR + channel: 107X +vor: + callsign: AKR + frequency: 116 MHz +atc: + hf: 4.625 MHz + vhf_low: 128 MHz + vhf_high: 40.150 MHz + uhf: 251.700 MHz +runways: + "28": + ils: + callsign: IAK + frequency: 109.700 MHz diff --git a/resources/airfields/Syria/al_dumayr.yaml b/resources/airfields/Syria/al_dumayr.yaml new file mode 100644 index 00000000..95fae90d --- /dev/null +++ b/resources/airfields/Syria/al_dumayr.yaml @@ -0,0 +1,11 @@ +--- +name: Al-Dumayr +id: 9 +icao: OS61 +elevation: 2066 +runway_length: 8902 +atc: + hf: 4.750 MHz + vhf_low: 120.300 MHz + vhf_high: 40.400 MHz + uhf: 251.950 MHz diff --git a/resources/airfields/Syria/al_qusayr.yaml b/resources/airfields/Syria/al_qusayr.yaml new file mode 100644 index 00000000..7d950a75 --- /dev/null +++ b/resources/airfields/Syria/al_qusayr.yaml @@ -0,0 +1,11 @@ +--- +name: Al Qusayr +id: 3 +icao: OS70 +elevation: 1729 +runway_length: 8585 +atc: + hf: 4.550 MHz + vhf_low: 119.200 MHz + vhf_high: 40 MHz + uhf: 251.550 MHz diff --git a/resources/airfields/Syria/aleppo.yaml b/resources/airfields/Syria/aleppo.yaml new file mode 100644 index 00000000..f5059bbe --- /dev/null +++ b/resources/airfields/Syria/aleppo.yaml @@ -0,0 +1,11 @@ +--- +name: Aleppo +id: 27 +icao: OSAP +elevation: 1253 +runway_length: 8332 +atc: + hf: 4.200 MHz + vhf_low: 119.100 MHz + vhf_high: 39.300 MHz + uhf: 250.850 MHz diff --git a/resources/airfields/Syria/an_nasiriyah.yaml b/resources/airfields/Syria/an_nasiriyah.yaml new file mode 100644 index 00000000..b9195348 --- /dev/null +++ b/resources/airfields/Syria/an_nasiriyah.yaml @@ -0,0 +1,11 @@ +--- +name: An Nasiriyah +id: 4 +icao: OS64 +elevation: 2746 +runway_length: 8172 +atc: + hf: 4.600 MHz + vhf_low: 122.300 MHz + vhf_high: 40.100 MHz + uhf: 251.650 MHz diff --git a/resources/airfields/Syria/bassel_al_assad.yaml b/resources/airfields/Syria/bassel_al_assad.yaml new file mode 100644 index 00000000..fb4aae47 --- /dev/null +++ b/resources/airfields/Syria/bassel_al_assad.yaml @@ -0,0 +1,19 @@ +--- +name: Bassel Al-Assad +id: 21 +icao: OSLK +elevation: 93 +runway_length: 7305 +vor: + callsign: LTK + frequency: 114.800 MHz +atc: + hf: 4.050 MHz + vhf_low: 118.100 MHz + vhf_high: 39 MHz + uhf: 250.550 MHz +runways: + "17": + ils: + callsign: IBA + frequency: 109.100 MHz diff --git a/resources/airfields/Syria/beirut_rafic_hariri.yaml b/resources/airfields/Syria/beirut_rafic_hariri.yaml new file mode 100644 index 00000000..ed3a3cd1 --- /dev/null +++ b/resources/airfields/Syria/beirut_rafic_hariri.yaml @@ -0,0 +1,19 @@ +--- +name: Beirut-Rafic Hariri +id: 6 +icao: OLBA +elevation: 39 +runway_length: 9463 +vor: + callsign: KAD + frequency: 112.600 MHz +atc: + hf: 4.675 MHz + vhf_low: 118.900 MHz + vhf_high: 40.250 MHz + uhf: 251.800 MHz +runways: + "17": + ils: + callsign: BIL + frequency: 109.500 MHz diff --git a/resources/airfields/Syria/damascus.yaml b/resources/airfields/Syria/damascus.yaml new file mode 100644 index 00000000..33a2dcc4 --- /dev/null +++ b/resources/airfields/Syria/damascus.yaml @@ -0,0 +1,19 @@ +--- +name: Damascus +id: 7 +icao: OSDI +elevation: 2007 +runway_length: 11423 +vor: + callsign: DAM + frequency: 116 MHz +atc: + hf: 4.700 MHz + vhf_low: 118.500 MHz + vhf_high: 40.300 MHz + uhf: 251.850 MHz +runways: + "24": + ils: + callsign: IDA + frequency: 109.900 MHz diff --git a/resources/airfields/Syria/ercan.yaml b/resources/airfields/Syria/ercan.yaml new file mode 100644 index 00000000..53dfad18 --- /dev/null +++ b/resources/airfields/Syria/ercan.yaml @@ -0,0 +1,14 @@ +--- +name: Ercan +id: 49 +icao: LCEN +elevation: 383 +runway_length: 7559 +vor: + callsign: ECN + frequency: 117 MHz +atc: + hf: 4.750 MHz + vhf_low: 120.200 MHz + vhf_high: 40.400 MHz + uhf: 251.950 MHz diff --git a/resources/airfields/Syria/eyn_shemer.yaml b/resources/airfields/Syria/eyn_shemer.yaml new file mode 100644 index 00000000..78750ed3 --- /dev/null +++ b/resources/airfields/Syria/eyn_shemer.yaml @@ -0,0 +1,11 @@ +--- +name: Eyn Shemer +id: 10 +icao: LLES +elevation: 93 +runway_length: 3562 +atc: + hf: 3.750 MHz + vhf_low: 123.400 MHz + vhf_high: 38.400 MHz + uhf: 250 MHz diff --git a/resources/airfields/Syria/gaziantep.yaml b/resources/airfields/Syria/gaziantep.yaml new file mode 100644 index 00000000..e73b8c21 --- /dev/null +++ b/resources/airfields/Syria/gaziantep.yaml @@ -0,0 +1,16 @@ +--- +name: Gaziantep +id: 11 +icao: LTAJ +elevation: 2287 +runway_length: 8871 +atc: + hf: 3.775 MHz + vhf_low: 120.100 MHz + vhf_high: 38.450 MHz + uhf: 250.050 MHz +runways: + "28": + ils: + callsign: IGNP + frequency: 109.100 MHz diff --git a/resources/airfields/Syria/gazipasa.yaml b/resources/airfields/Syria/gazipasa.yaml new file mode 100644 index 00000000..d54134d3 --- /dev/null +++ b/resources/airfields/Syria/gazipasa.yaml @@ -0,0 +1,19 @@ +--- +name: Gazipasa +id: 41 +icao: LTFG +elevation: 36 +runway_length: 6885 +vor: + callsign: GZP + frequency: 114.200 MHz +atc: + hf: 4.600 MHz + vhf_low: 119.250 MHz + vhf_high: 40.100 MHz + uhf: 251.650 MHz +runways: + "8": + ils: + callsign: IGZP + frequency: 108.500 MHz diff --git a/resources/airfields/Syria/gecitkale.yaml b/resources/airfields/Syria/gecitkale.yaml new file mode 100644 index 00000000..cd3b0924 --- /dev/null +++ b/resources/airfields/Syria/gecitkale.yaml @@ -0,0 +1,14 @@ +--- +name: Gecitkale +id: 50 +icao: LCGK +elevation: 147 +runway_length: 8156 +vor: + callsign: GKE + frequency: 114.300 MHz +atc: + hf: 3.775 MHz + vhf_low: 40.500 MHz + vhf_high: 4.800 MHz + uhf: 252.050 MHz diff --git a/resources/airfields/Syria/h4.yaml b/resources/airfields/Syria/h4.yaml new file mode 100644 index 00000000..5b2073bf --- /dev/null +++ b/resources/airfields/Syria/h4.yaml @@ -0,0 +1,11 @@ +--- +name: H4 +id: 12 +icao: OJHR +elevation: 2257 +runway_length: 7179 +atc: + hf: 3.800 MHz + vhf_low: 120.400 MHz + vhf_high: 38.500 MHz + uhf: 250.100 MHz diff --git a/resources/airfields/Syria/haifa.yaml b/resources/airfields/Syria/haifa.yaml new file mode 100644 index 00000000..7e4a9423 --- /dev/null +++ b/resources/airfields/Syria/haifa.yaml @@ -0,0 +1,11 @@ +--- +name: Haifa +id: 13 +icao: LLHA +elevation: 19 +runway_length: 3253 +atc: + hf: 3.825 MHz + vhf_low: 127.800 MHz + vhf_high: 38.550 MHz + uhf: 250.150 MHz diff --git a/resources/airfields/Syria/hama.yaml b/resources/airfields/Syria/hama.yaml new file mode 100644 index 00000000..356f54b5 --- /dev/null +++ b/resources/airfields/Syria/hama.yaml @@ -0,0 +1,11 @@ +--- +name: Hama +id: 14 +icao: OS58 +elevation: 983 +runway_length: 7957 +atc: + hf: 3.850 MHz + vhf_low: 118.050 MHz + vhf_high: 38.600 MHz + uhf: 250.200 MHz diff --git a/resources/airfields/Syria/hatay.yaml b/resources/airfields/Syria/hatay.yaml new file mode 100644 index 00000000..985a147e --- /dev/null +++ b/resources/airfields/Syria/hatay.yaml @@ -0,0 +1,23 @@ +--- +name: Hatay +id: 15 +icao: LTDA +elevation: 253 +runway_length: 9052 +vor: + callsign: HTY + frequency: 112.500 MHz +atc: + hf: 3.875 MHz + vhf_low: 128.500 MHz + vhf_high: 38.650 MHz + uhf: 250.250 MHz +runways: + "22": + ils: + callsign: IHTY + frequency: 108.150 MHz + "04": + ils: + callsign: IHAT + frequency: 108.900 MHz diff --git a/resources/airfields/Syria/incirlik.yaml b/resources/airfields/Syria/incirlik.yaml new file mode 100644 index 00000000..490596d3 --- /dev/null +++ b/resources/airfields/Syria/incirlik.yaml @@ -0,0 +1,26 @@ +--- +name: Incirlik +id: 16 +icao: LTAG +elevation: 156 +runway_length: 9662 +tacan: + callsign: DAN + channel: 21X +vor: + callsign: DAN + frequency: 108.400 MHz +atc: + hf: 3.900 MHz + vhf_low: 122.100 MHz + vhf_high: 38.700 MHz + uhf: 360.100 MHz +runways: + "23": + ils: + callsign: DANM + frequency: 111.700 MHz + "05": + ils: + callsign: IDAN + frequency: 109.300 MHz diff --git a/resources/airfields/Syria/jirah.yaml b/resources/airfields/Syria/jirah.yaml new file mode 100644 index 00000000..0503f30b --- /dev/null +++ b/resources/airfields/Syria/jirah.yaml @@ -0,0 +1,11 @@ +--- +name: Jirah +id: 17 +icao: OS62 +elevation: 1170 +runway_length: 9090 +atc: + hf: 3.925 MHz + vhf_low: 118.100 MHz + vhf_high: 38.750 MHz + uhf: 250.300 MHz diff --git a/resources/airfields/Syria/khalkhalah.yaml b/resources/airfields/Syria/khalkhalah.yaml new file mode 100644 index 00000000..90942b3b --- /dev/null +++ b/resources/airfields/Syria/khalkhalah.yaml @@ -0,0 +1,11 @@ +--- +name: Khalkhalah +id: 18 +icao: OS69 +elevation: 2337 +runway_length: 8248 +atc: + hf: 3.950 MHz + vhf_low: 122.500 MHz + vhf_high: 38.800 MHz + uhf: 250.350 MHz diff --git a/resources/airfields/Syria/king_hussein_air_college.yaml b/resources/airfields/Syria/king_hussein_air_college.yaml new file mode 100644 index 00000000..eeaff52a --- /dev/null +++ b/resources/airfields/Syria/king_hussein_air_college.yaml @@ -0,0 +1,11 @@ +--- +name: King Hussein Air College +id: 19 +icao: OJMF +elevation: 2204 +runway_length: 8595 +atc: + hf: 3.975 MHz + vhf_low: 118.300 MHz + vhf_high: 38.850 MHz + uhf: 250.400 MHz diff --git a/resources/airfields/Syria/kingsfield.yaml b/resources/airfields/Syria/kingsfield.yaml new file mode 100644 index 00000000..9975689f --- /dev/null +++ b/resources/airfields/Syria/kingsfield.yaml @@ -0,0 +1,11 @@ +--- +name: Kingsfield +id: 45 +icao: CY-0004 +elevation: 270 +runway_length: 3069 +atc: + hf: 4.650 MHz + vhf_low: 121 MHz + vhf_high: 40.200 MHz + uhf: 251.750 MHz diff --git a/resources/airfields/Syria/kiryat_shmona.yaml b/resources/airfields/Syria/kiryat_shmona.yaml new file mode 100644 index 00000000..44911cf2 --- /dev/null +++ b/resources/airfields/Syria/kiryat_shmona.yaml @@ -0,0 +1,11 @@ +--- +name: Kiryat Shmona +id: 20 +icao: LLKS +elevation: 328 +runway_length: 3258 +atc: + hf: 4.025 MHz + vhf_low: 118.400 MHz + vhf_high: 38.950 MHz + uhf: 250.500 MHz diff --git a/resources/airfields/Syria/kuweires.yaml b/resources/airfields/Syria/kuweires.yaml new file mode 100644 index 00000000..b0688cda --- /dev/null +++ b/resources/airfields/Syria/kuweires.yaml @@ -0,0 +1,11 @@ +--- +name: Kuweires +id: 31 +icao: OS66 +elevation: 1200 +runway_length: 6662 +atc: + hf: 4.325 MHz + vhf_low: 120.500 MHz + vhf_high: 39.550 MHz + uhf: 251.100 MHz diff --git a/resources/airfields/Syria/lakatamia.yaml b/resources/airfields/Syria/lakatamia.yaml new file mode 100644 index 00000000..361c45f4 --- /dev/null +++ b/resources/airfields/Syria/lakatamia.yaml @@ -0,0 +1,11 @@ +--- +name: Lakatamia +id: 48 +icao: CY-0001 +elevation: 757 +runway_length: 1230 +atc: + hf: 4.725 MHz + vhf_low: 120.200 MHz + vhf_high: 40.350 MHz + uhf: 251.900 MHz diff --git a/resources/airfields/Syria/larnaca.yaml b/resources/airfields/Syria/larnaca.yaml new file mode 100644 index 00000000..4d033702 --- /dev/null +++ b/resources/airfields/Syria/larnaca.yaml @@ -0,0 +1,19 @@ +--- +name: Larnaca +id: 47 +icao: LCRE +elevation: 16 +runway_length: 8009 +vor: + callsign: LCA + frequency: 112.080 MHz +atc: + hf: 4.700 MHz + vhf_low: 121.200 MHz + vhf_high: 40.300 MHz + uhf: 251.850 MHz +runways: + "22": + ils: + callsign: ILC + frequency: 110.300 MHz diff --git a/resources/airfields/Syria/marj_as_sultan_north.yaml b/resources/airfields/Syria/marj_as_sultan_north.yaml new file mode 100644 index 00000000..f7bef9fe --- /dev/null +++ b/resources/airfields/Syria/marj_as_sultan_north.yaml @@ -0,0 +1,10 @@ +--- +name: Marj as Sultan North +id: 22 +elevation: 2007 +runway_length: 268 +atc: + hf: 4.075 MHz + vhf_low: 122.700 MHz + vhf_high: 38.050 MHz + uhf: 250.600 MHz diff --git a/resources/airfields/Syria/marj_as_sultan_south.yaml b/resources/airfields/Syria/marj_as_sultan_south.yaml new file mode 100644 index 00000000..5d51364c --- /dev/null +++ b/resources/airfields/Syria/marj_as_sultan_south.yaml @@ -0,0 +1,10 @@ +--- +name: Marj as Sultan South +id: 8 +elevation: 2007 +runway_length: 166 +atc: + hf: 4.725 MHz + vhf_low: 122.900 MHz + vhf_high: 40.350 MHz + uhf: 251.900 MHz diff --git a/resources/airfields/Syria/marj_ruhayyil.yaml b/resources/airfields/Syria/marj_ruhayyil.yaml new file mode 100644 index 00000000..b2056185 --- /dev/null +++ b/resources/airfields/Syria/marj_ruhayyil.yaml @@ -0,0 +1,11 @@ +--- +name: Marj Ruhayyil +id: 23 +icao: OS63 +elevation: 2160 +runway_length: 7576 +atc: + hf: 4.100 MHz + vhf_low: 120.800 MHz + vhf_high: 39.100 MHz + uhf: 256.550 MHz diff --git a/resources/airfields/Syria/megiddo.yaml b/resources/airfields/Syria/megiddo.yaml new file mode 100644 index 00000000..a8533ed2 --- /dev/null +++ b/resources/airfields/Syria/megiddo.yaml @@ -0,0 +1,11 @@ +--- +name: Megiddo +id: 24 +icao: LLMG +elevation: 180 +runway_length: 6098 +atc: + hf: 4.125 MHz + vhf_low: 119.900 MHz + vhf_high: 39.150 MHz + uhf: 250.700 MHz diff --git a/resources/airfields/Syria/mezzeh.yaml b/resources/airfields/Syria/mezzeh.yaml new file mode 100644 index 00000000..6ec2e58f --- /dev/null +++ b/resources/airfields/Syria/mezzeh.yaml @@ -0,0 +1,11 @@ +--- +name: Mezzeh +id: 25 +icao: OS67 +elevation: 2355 +runway_length: 7522 +atc: + hf: 4.150 MHz + vhf_low: 120.700 MHz + vhf_high: 39.200 MHz + uhf: 250.750 MHz diff --git a/resources/airfields/Syria/minakh.yaml b/resources/airfields/Syria/minakh.yaml new file mode 100644 index 00000000..6a1ccea4 --- /dev/null +++ b/resources/airfields/Syria/minakh.yaml @@ -0,0 +1,11 @@ +--- +name: Minakh +id: 26 +icao: OS71 +elevation: 1614 +runway_length: 4648 +atc: + hf: 4.175 MHz + vhf_low: 120.600 MHz + vhf_high: 39.250 MHz + uhf: 250.800 MHz diff --git a/resources/airfields/Syria/naqoura.yaml b/resources/airfields/Syria/naqoura.yaml new file mode 100644 index 00000000..60572404 --- /dev/null +++ b/resources/airfields/Syria/naqoura.yaml @@ -0,0 +1,10 @@ +--- +name: Naqoura +id: 52 +elevation: 378 +runway_length: 0 +atc: + hf: 4.625 MHz + vhf_low: 122 MHz + vhf_high: 40.150 MHz + uhf: 251.700 MHz diff --git a/resources/airfields/Syria/palmyra.yaml b/resources/airfields/Syria/palmyra.yaml new file mode 100644 index 00000000..bd8f5b5a --- /dev/null +++ b/resources/airfields/Syria/palmyra.yaml @@ -0,0 +1,11 @@ +--- +name: Palmyra +id: 28 +icao: OSPR +elevation: 1267 +runway_length: 8704 +atc: + hf: 4.225 MHz + vhf_low: 121.900 MHz + vhf_high: 39.350 MHz + uhf: 250.900 MHz diff --git a/resources/airfields/Syria/paphos.yaml b/resources/airfields/Syria/paphos.yaml new file mode 100644 index 00000000..2d102db2 --- /dev/null +++ b/resources/airfields/Syria/paphos.yaml @@ -0,0 +1,19 @@ +--- +name: Paphos +id: 46 +icao: LCPH +elevation: 40 +runway_length: 8425 +vor: + callsign: PHA + frequency: 117.900 MHz +atc: + hf: 4.675 MHz + vhf_low: 119.900 MHz + vhf_high: 40.250 MHz + uhf: 251.800 MHz +runways: + "29": + ils: + callsign: IPA + frequency: 108.900 MHz diff --git a/resources/airfields/Syria/pinarbashi.yaml b/resources/airfields/Syria/pinarbashi.yaml new file mode 100644 index 00000000..09271561 --- /dev/null +++ b/resources/airfields/Syria/pinarbashi.yaml @@ -0,0 +1,11 @@ +--- +name: Pinarbashi +id: 51 +icao: CY-0003 +elevation: 770 +runway_length: 3364 +atc: + hf: 4.825 MHz + vhf_low: 121 MHz + vhf_high: 40.550 MHz + uhf: 252.100 MHz diff --git a/resources/airfields/Syria/qabr_as_sitt.yaml b/resources/airfields/Syria/qabr_as_sitt.yaml new file mode 100644 index 00000000..f4313bd3 --- /dev/null +++ b/resources/airfields/Syria/qabr_as_sitt.yaml @@ -0,0 +1,10 @@ +--- +name: Qabr as Sitt +id: 29 +elevation: 2134 +runway_length: 489 +atc: + hf: 4.250 MHz + vhf_low: 122.600 MHz + vhf_high: 39.400 MHz + uhf: 250.950 MHz diff --git a/resources/airfields/Syria/ramat_david.yaml b/resources/airfields/Syria/ramat_david.yaml new file mode 100644 index 00000000..3c1bfb71 --- /dev/null +++ b/resources/airfields/Syria/ramat_david.yaml @@ -0,0 +1,11 @@ +--- +name: Ramat David +id: 30 +icao: LLRD +elevation: 105 +runway_length: 7037 +atc: + hf: 4.300 MHz + vhf_low: 118.600 MHz + vhf_high: 39.500 MHz + uhf: 251.050 MHz diff --git a/resources/airfields/Syria/rayak.yaml b/resources/airfields/Syria/rayak.yaml new file mode 100644 index 00000000..64b42d27 --- /dev/null +++ b/resources/airfields/Syria/rayak.yaml @@ -0,0 +1,14 @@ +--- +name: Rayak +id: 32 +icao: OLRA +elevation: 2934 +runway_length: 8699 +vor: + callsign: HTY + frequency: 124.400 MHz +atc: + hf: 4.350 MHz + vhf_low: 124.400 MHz + vhf_high: 39.600 MHz + uhf: 251.150 MHz diff --git a/resources/airfields/Syria/rene_mouawad.yaml b/resources/airfields/Syria/rene_mouawad.yaml new file mode 100644 index 00000000..bb1b9a71 --- /dev/null +++ b/resources/airfields/Syria/rene_mouawad.yaml @@ -0,0 +1,11 @@ +--- +name: Rene Mouawad +id: 33 +icao: OLKA +elevation: 14 +runway_length: 8614 +atc: + hf: 4.375 MHz + vhf_low: 121 MHz + vhf_high: 39.650 MHz + uhf: 251.200 MHz diff --git a/resources/airfields/Syria/rosh_pina.yaml b/resources/airfields/Syria/rosh_pina.yaml new file mode 100644 index 00000000..f0b08292 --- /dev/null +++ b/resources/airfields/Syria/rosh_pina.yaml @@ -0,0 +1,11 @@ +--- +name: Rosh Pina +id: 34 +icao: LLIB +elevation: 865 +runway_length: 2711 +atc: + hf: 4.400 MHz + vhf_low: 118.450 MHz + vhf_high: 39.700 MHz + uhf: 251.250 MHz diff --git a/resources/airfields/Syria/sayqal.yaml b/resources/airfields/Syria/sayqal.yaml new file mode 100644 index 00000000..23657d6e --- /dev/null +++ b/resources/airfields/Syria/sayqal.yaml @@ -0,0 +1,11 @@ +--- +name: Sayqal +id: 35 +icao: OS68 +elevation: 2273 +runway_length: 8536 +atc: + hf: 4.425 MHz + vhf_low: 120.400 MHz + vhf_high: 39.750 MHz + uhf: 251.300 MHz diff --git a/resources/airfields/Syria/shayrat.yaml b/resources/airfields/Syria/shayrat.yaml new file mode 100644 index 00000000..a2a41ee1 --- /dev/null +++ b/resources/airfields/Syria/shayrat.yaml @@ -0,0 +1,11 @@ +--- +name: Shayrat +id: 36 +icao: OS60 +elevation: 2637 +runway_length: 8553 +atc: + hf: 4.450 MHz + vhf_low: 122.200 MHz + vhf_high: 39.800 MHz + uhf: 251.350 MHz diff --git a/resources/airfields/Syria/tabqa.yaml b/resources/airfields/Syria/tabqa.yaml new file mode 100644 index 00000000..1898bb54 --- /dev/null +++ b/resources/airfields/Syria/tabqa.yaml @@ -0,0 +1,11 @@ +--- +name: Tabqa +id: 37 +icao: OS59 +elevation: 1083 +runway_length: 9036 +atc: + hf: 4.500 MHz + vhf_low: 122.800 MHz + vhf_high: 39.900 MHz + uhf: 251.450 MHz diff --git a/resources/airfields/Syria/taftanaz.yaml b/resources/airfields/Syria/taftanaz.yaml new file mode 100644 index 00000000..8327c30e --- /dev/null +++ b/resources/airfields/Syria/taftanaz.yaml @@ -0,0 +1,10 @@ +--- +name: Taftanaz +id: 38 +elevation: 1020 +runway_length: 2705 +atc: + hf: 4.375 MHz + vhf_low: 122.800 MHz + vhf_high: 39.650 MHz + uhf: 251.200 MHz diff --git a/resources/airfields/Syria/tha_lah.yaml b/resources/airfields/Syria/tha_lah.yaml new file mode 100644 index 00000000..57032612 --- /dev/null +++ b/resources/airfields/Syria/tha_lah.yaml @@ -0,0 +1,11 @@ +--- +name: Tha'lah +id: 5 +icao: OS60 +elevation: 2381 +runway_length: 8025 +atc: + hf: 4.650 MHz + vhf_low: 122.400 MHz + vhf_high: 40.200 MHz + uhf: 251.750 MHz diff --git a/resources/airfields/Syria/tiyas.yaml b/resources/airfields/Syria/tiyas.yaml new file mode 100644 index 00000000..74416739 --- /dev/null +++ b/resources/airfields/Syria/tiyas.yaml @@ -0,0 +1,11 @@ +--- +name: Tiyas +id: 39 +icao: OS72 +elevation: 1797 +runway_length: 9420 +atc: + hf: 4.525 MHz + vhf_low: 120.500 MHz + vhf_high: 39.950 MHz + uhf: 251.500 MHz diff --git a/resources/airfields/Syria/wujah_al_hajar.yaml b/resources/airfields/Syria/wujah_al_hajar.yaml new file mode 100644 index 00000000..140b70c9 --- /dev/null +++ b/resources/airfields/Syria/wujah_al_hajar.yaml @@ -0,0 +1,14 @@ +--- +name: Wujah Al Hajar +id: 40 +icao: Z19O +elevation: 619 +runway_length: 4717 +vor: + callsign: CAK + frequency: 116.200 MHz +atc: + hf: 4.575 MHz + vhf_low: 121.500 MHz + vhf_high: 40.050 MHz + uhf: 251.600 MHz diff --git a/resources/airfields/TheChannel/abbeville_drucat.yaml b/resources/airfields/TheChannel/abbeville_drucat.yaml new file mode 100644 index 00000000..3da70b11 --- /dev/null +++ b/resources/airfields/TheChannel/abbeville_drucat.yaml @@ -0,0 +1,10 @@ +--- +name: Abbeville Drucat +id: 1 +elevation: 183 +runway_length: 4726 +atc: + hf: 3.875 MHz + vhf_low: 38.650 MHz + vhf_high: 118.250 MHz + uhf: 250.250 MHz diff --git a/resources/airfields/TheChannel/biggin_hill.yaml b/resources/airfields/TheChannel/biggin_hill.yaml new file mode 100644 index 00000000..b5f161e6 --- /dev/null +++ b/resources/airfields/TheChannel/biggin_hill.yaml @@ -0,0 +1,10 @@ +--- +name: Biggin Hill +id: 14 +elevation: 552 +runway_length: 3953 +atc: + hf: 3.850 MHz + vhf_low: 38.600 MHz + vhf_high: 118.200 MHz + uhf: 250.200 MHz diff --git a/resources/airfields/TheChannel/detling.yaml b/resources/airfields/TheChannel/detling.yaml new file mode 100644 index 00000000..32b88c80 --- /dev/null +++ b/resources/airfields/TheChannel/detling.yaml @@ -0,0 +1,10 @@ +--- +name: Detling +id: 8 +elevation: 623 +runway_length: 3482 +atc: + hf: 4.050 MHz + vhf_low: 39 MHz + vhf_high: 118.600 MHz + uhf: 250.600 MHz diff --git a/resources/airfields/TheChannel/dunkirk_mardyck.yaml b/resources/airfields/TheChannel/dunkirk_mardyck.yaml new file mode 100644 index 00000000..182d1423 --- /dev/null +++ b/resources/airfields/TheChannel/dunkirk_mardyck.yaml @@ -0,0 +1,10 @@ +--- +name: Dunkirk Mardyck +id: 4 +elevation: 16 +runway_length: 1737 +atc: + hf: 3.950 MHz + vhf_low: 38.850 MHz + vhf_high: 118.450 MHz + uhf: 250.450 MHz diff --git a/resources/airfields/TheChannel/eastchurch.yaml b/resources/airfields/TheChannel/eastchurch.yaml new file mode 100644 index 00000000..1b5f671f --- /dev/null +++ b/resources/airfields/TheChannel/eastchurch.yaml @@ -0,0 +1,10 @@ +--- +name: Eastchurch +id: 10 +elevation: 30 +runway_length: 2983 +atc: + hf: 3.775 MHz + vhf_low: 38.450 MHz + vhf_high: 118.050 MHz + uhf: 250.050 MHz diff --git a/resources/airfields/TheChannel/hawkinge.yaml b/resources/airfields/TheChannel/hawkinge.yaml new file mode 100644 index 00000000..ae176204 --- /dev/null +++ b/resources/airfields/TheChannel/hawkinge.yaml @@ -0,0 +1,10 @@ +--- +name: Hawkinge +id: 6 +elevation: 524 +runway_length: 3013 +atc: + hf: 4 MHz + vhf_low: 38.900 MHz + vhf_high: 118.500 MHz + uhf: 250.500 MHz diff --git a/resources/airfields/TheChannel/headcorn.yaml b/resources/airfields/TheChannel/headcorn.yaml new file mode 100644 index 00000000..33d2a276 --- /dev/null +++ b/resources/airfields/TheChannel/headcorn.yaml @@ -0,0 +1,10 @@ +--- +name: Headcorn +id: 13 +elevation: 114 +runway_length: 3680 +atc: + hf: 3.825 MHz + vhf_low: 38.550 MHz + vhf_high: 118.150 MHz + uhf: 250.150 MHz diff --git a/resources/airfields/TheChannel/high_halden.yaml b/resources/airfields/TheChannel/high_halden.yaml new file mode 100644 index 00000000..8dd71b24 --- /dev/null +++ b/resources/airfields/TheChannel/high_halden.yaml @@ -0,0 +1,10 @@ +--- +name: High Halden +id: 12 +elevation: 104 +runway_length: 3296 +atc: + hf: 3.800 MHz + vhf_low: 38.500 MHz + vhf_high: 118.100 MHz + uhf: 250.100 MHz diff --git a/resources/airfields/TheChannel/lympne.yaml b/resources/airfields/TheChannel/lympne.yaml new file mode 100644 index 00000000..e832b535 --- /dev/null +++ b/resources/airfields/TheChannel/lympne.yaml @@ -0,0 +1,10 @@ +--- +name: Lympne +id: 7 +elevation: 351 +runway_length: 3054 +atc: + hf: 4.025 MHz + vhf_low: 38.950 MHz + vhf_high: 118.550 MHz + uhf: 250.550 MHz diff --git a/resources/airfields/TheChannel/manston.yaml b/resources/airfields/TheChannel/manston.yaml new file mode 100644 index 00000000..79163b66 --- /dev/null +++ b/resources/airfields/TheChannel/manston.yaml @@ -0,0 +1,10 @@ +--- +name: Manston +id: 5 +elevation: 160 +runway_length: 8626 +atc: + hf: 3.975 MHz + vhf_low: 38.650 MHz + vhf_high: 118.250 MHz + uhf: 250.250 MHz diff --git a/resources/airfields/TheChannel/merville_calonne.yaml b/resources/airfields/TheChannel/merville_calonne.yaml new file mode 100644 index 00000000..9f7ba3bb --- /dev/null +++ b/resources/airfields/TheChannel/merville_calonne.yaml @@ -0,0 +1,10 @@ +--- +name: Merville Calonne +id: 2 +elevation: 52 +runway_length: 7580 +atc: + hf: 3.900 MHz + vhf_low: 38.700 MHz + vhf_high: 118.300 MHz + uhf: 250.300 MHz diff --git a/resources/airfields/TheChannel/saint_omer_longuenesse.yaml b/resources/airfields/TheChannel/saint_omer_longuenesse.yaml new file mode 100644 index 00000000..747c491d --- /dev/null +++ b/resources/airfields/TheChannel/saint_omer_longuenesse.yaml @@ -0,0 +1,10 @@ +--- +name: Saint Omer Longuenesse +id: 3 +elevation: 219 +runway_length: 1929 +atc: + hf: 3.925 MHz + vhf_low: 38.750 MHz + vhf_high: 118.350 MHz + uhf: 250.350 MHz diff --git a/tests/test_radios.py b/tests/test_radios.py new file mode 100644 index 00000000..7ec061ca --- /dev/null +++ b/tests/test_radios.py @@ -0,0 +1,36 @@ +from typing import Callable + +import pytest + +from game.radio.radios import MHz, RadioFrequency, kHz + + +@pytest.mark.parametrize("units,factory", [("kHz", kHz), ("MHz", MHz)]) +def test_radio_parsing(units: str, factory: Callable[..., RadioFrequency]) -> None: + assert RadioFrequency.parse(f"0 {units}") == factory(0) + assert RadioFrequency.parse(f"0.0 {units}") == factory(0) + assert RadioFrequency.parse(f"255 {units}") == factory(255) + assert RadioFrequency.parse(f"255.5 {units}") == factory(255, 500) + assert RadioFrequency.parse(f"255.500 {units}") == factory(255, 500) + assert RadioFrequency.parse(f"255.050 {units}") == factory(255, 50) + assert RadioFrequency.parse(f"255.005 {units}") == factory(255, 5) + assert RadioFrequency.parse(f"255.0 {units}") == factory(255) + + with pytest.raises(ValueError): + RadioFrequency.parse("") + with pytest.raises(ValueError): + RadioFrequency.parse("255") + with pytest.raises(ValueError): + RadioFrequency.parse(f" 255 {units}") + with pytest.raises(ValueError): + RadioFrequency.parse(f"255 {units} ") + with pytest.raises(ValueError): + RadioFrequency.parse(f"255 {units.lower()}") + with pytest.raises(ValueError): + RadioFrequency.parse(f"255. {units}") + with pytest.raises(ValueError): + RadioFrequency.parse(f".0 {units}") + with pytest.raises(ValueError): + RadioFrequency.parse(f"0. {units}") + with pytest.raises(ValueError): + RadioFrequency.parse(f"255.5555 {units}") diff --git a/tests/test_tacan.py b/tests/test_tacan.py index d01fa9f6..5f2179e4 100644 --- a/tests/test_tacan.py +++ b/tests/test_tacan.py @@ -1,3 +1,5 @@ +import pytest + from game.radio.tacan import ( OutOfTacanChannelsError, TacanBand, @@ -6,8 +8,6 @@ from game.radio.tacan import ( TacanRegistry, TacanUsage, ) -import pytest - ALL_VALID_X_TR = [1, *range(31, 46 + 1), *range(64, 126 + 1)] ALL_VALID_X_A2A = [*range(37, 63 + 1), *range(100, 126 + 1)] @@ -75,3 +75,29 @@ def test_reserve_again() -> None: with pytest.raises(TacanChannelInUseError): registry.mark_unavailable(TacanChannel(1, TacanBand.X)) registry.mark_unavailable(TacanChannel(1, TacanBand.X)) + + +def test_tacan_parsing() -> None: + assert TacanChannel.parse("1X") == TacanChannel(1, TacanBand.X) + assert TacanChannel.parse("1Y") == TacanChannel(1, TacanBand.Y) + assert TacanChannel.parse("10X") == TacanChannel(10, TacanBand.X) + assert TacanChannel.parse("100X") == TacanChannel(100, TacanBand.X) + + with pytest.raises(ValueError): + TacanChannel.parse("1000X") + with pytest.raises(ValueError): + TacanChannel.parse("0X") + with pytest.raises(ValueError): + TacanChannel.parse("1Z") + with pytest.raises(ValueError): + TacanChannel.parse("X") + with pytest.raises(ValueError): + TacanChannel.parse("1") + with pytest.raises(ValueError): + TacanChannel.parse("1 X") + with pytest.raises(ValueError): + TacanChannel.parse(" 1X") + with pytest.raises(ValueError): + TacanChannel.parse("1X ") + with pytest.raises(ValueError): + TacanChannel.parse("1x")