mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Merge branch 'develop' into waypoint-planning
This commit is contained in:
commit
1f18bf2bd8
@ -68,26 +68,8 @@ class Operation:
|
|||||||
def initialize(self, mission: Mission, conflict: Conflict):
|
def initialize(self, mission: Mission, conflict: Conflict):
|
||||||
self.current_mission = mission
|
self.current_mission = mission
|
||||||
self.conflict = conflict
|
self.conflict = conflict
|
||||||
self.radio_registry = RadioRegistry()
|
self.briefinggen = BriefingGenerator(self.current_mission,
|
||||||
self.tacan_registry = TacanRegistry()
|
self.conflict, self.game)
|
||||||
self.airgen = AircraftConflictGenerator(
|
|
||||||
mission, conflict, self.game.settings, self.game,
|
|
||||||
self.radio_registry)
|
|
||||||
self.airsupportgen = AirSupportConflictGenerator(
|
|
||||||
mission, conflict, self.game, self.radio_registry,
|
|
||||||
self.tacan_registry)
|
|
||||||
self.triggersgen = TriggersGenerator(mission, conflict, self.game)
|
|
||||||
self.visualgen = VisualGenerator(mission, conflict, self.game)
|
|
||||||
self.envgen = EnviromentGenerator(mission, conflict, self.game)
|
|
||||||
self.forcedoptionsgen = ForcedOptionsGenerator(mission, conflict, self.game)
|
|
||||||
self.groundobjectgen = GroundObjectsGenerator(
|
|
||||||
mission,
|
|
||||||
conflict,
|
|
||||||
self.game,
|
|
||||||
self.radio_registry,
|
|
||||||
self.tacan_registry
|
|
||||||
)
|
|
||||||
self.briefinggen = BriefingGenerator(mission, conflict, self.game)
|
|
||||||
|
|
||||||
def prepare(self, terrain: Terrain, is_quick: bool):
|
def prepare(self, terrain: Terrain, is_quick: bool):
|
||||||
with open("resources/default_options.lua", "r") as f:
|
with open("resources/default_options.lua", "r") as f:
|
||||||
@ -127,6 +109,9 @@ class Operation:
|
|||||||
self.defenders_starting_position = self.to_cp.at
|
self.defenders_starting_position = self.to_cp.at
|
||||||
|
|
||||||
def generate(self):
|
def generate(self):
|
||||||
|
radio_registry = RadioRegistry()
|
||||||
|
tacan_registry = TacanRegistry()
|
||||||
|
|
||||||
# Dedup beacon/radio frequencies, since some maps have some frequencies
|
# Dedup beacon/radio frequencies, since some maps have some frequencies
|
||||||
# used multiple times.
|
# used multiple times.
|
||||||
beacons = load_beacons_for_terrain(self.game.theater.terrain.name)
|
beacons = load_beacons_for_terrain(self.game.theater.terrain.name)
|
||||||
@ -138,7 +123,7 @@ class Operation:
|
|||||||
logging.error(
|
logging.error(
|
||||||
f"TACAN beacon has no channel: {beacon.callsign}")
|
f"TACAN beacon has no channel: {beacon.callsign}")
|
||||||
else:
|
else:
|
||||||
self.tacan_registry.reserve(beacon.tacan_channel)
|
tacan_registry.reserve(beacon.tacan_channel)
|
||||||
|
|
||||||
for airfield, data in AIRFIELD_DATA.items():
|
for airfield, data in AIRFIELD_DATA.items():
|
||||||
if data.theater == self.game.theater.terrain.name:
|
if data.theater == self.game.theater.terrain.name:
|
||||||
@ -150,16 +135,26 @@ class Operation:
|
|||||||
# beacon list.
|
# beacon list.
|
||||||
|
|
||||||
for frequency in unique_map_frequencies:
|
for frequency in unique_map_frequencies:
|
||||||
self.radio_registry.reserve(frequency)
|
radio_registry.reserve(frequency)
|
||||||
|
|
||||||
# Generate meteo
|
# Generate meteo
|
||||||
|
envgen = EnviromentGenerator(self.current_mission, self.conflict,
|
||||||
|
self.game)
|
||||||
if self.environment_settings is None:
|
if self.environment_settings is None:
|
||||||
self.environment_settings = self.envgen.generate()
|
self.environment_settings = envgen.generate()
|
||||||
else:
|
else:
|
||||||
self.envgen.load(self.environment_settings)
|
envgen.load(self.environment_settings)
|
||||||
|
|
||||||
# Generate ground object first
|
# Generate ground object first
|
||||||
self.groundobjectgen.generate()
|
|
||||||
|
groundobjectgen = GroundObjectsGenerator(
|
||||||
|
self.current_mission,
|
||||||
|
self.conflict,
|
||||||
|
self.game,
|
||||||
|
radio_registry,
|
||||||
|
tacan_registry
|
||||||
|
)
|
||||||
|
groundobjectgen.generate()
|
||||||
|
|
||||||
# Generate destroyed units
|
# Generate destroyed units
|
||||||
for d in self.game.get_destroyed_units():
|
for d in self.game.get_destroyed_units():
|
||||||
@ -180,9 +175,11 @@ class Operation:
|
|||||||
dead=True,
|
dead=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
# Air Support (Tanker & Awacs)
|
# Air Support (Tanker & Awacs)
|
||||||
self.airsupportgen.generate(self.is_awacs_enabled)
|
airsupportgen = AirSupportConflictGenerator(
|
||||||
|
self.current_mission, self.conflict, self.game, radio_registry,
|
||||||
|
tacan_registry)
|
||||||
|
airsupportgen.generate(self.is_awacs_enabled)
|
||||||
|
|
||||||
# Generate Activity on the map
|
# Generate Activity on the map
|
||||||
self.airgen.generate_flights(
|
self.airgen.generate_flights(
|
||||||
@ -196,6 +193,7 @@ class Operation:
|
|||||||
self.groundobjectgen.runways
|
self.groundobjectgen.runways
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
# Generate ground units on frontline everywhere
|
# Generate ground units on frontline everywhere
|
||||||
jtacs: List[JtacInfo] = []
|
jtacs: List[JtacInfo] = []
|
||||||
for player_cp, enemy_cp in self.game.theater.conflicts(True):
|
for player_cp, enemy_cp in self.game.theater.conflicts(True):
|
||||||
@ -218,18 +216,20 @@ class Operation:
|
|||||||
self.current_mission.groundControl.red_tactical_commander = self.ca_slots
|
self.current_mission.groundControl.red_tactical_commander = self.ca_slots
|
||||||
|
|
||||||
# Triggers
|
# Triggers
|
||||||
if self.game.is_player_attack(self.conflict.attackers_country):
|
triggersgen = TriggersGenerator(self.current_mission, self.conflict,
|
||||||
cp = self.conflict.from_cp
|
self.game)
|
||||||
else:
|
triggersgen.generate()
|
||||||
cp = self.conflict.to_cp
|
|
||||||
self.triggersgen.generate()
|
|
||||||
|
|
||||||
# Options
|
# Options
|
||||||
self.forcedoptionsgen.generate()
|
forcedoptionsgen = ForcedOptionsGenerator(self.current_mission,
|
||||||
|
self.conflict, self.game)
|
||||||
|
forcedoptionsgen.generate()
|
||||||
|
|
||||||
# Generate Visuals Smoke Effects
|
# Generate Visuals Smoke Effects
|
||||||
|
visualgen = VisualGenerator(self.current_mission, self.conflict,
|
||||||
|
self.game)
|
||||||
if self.game.settings.perf_smoke_gen:
|
if self.game.settings.perf_smoke_gen:
|
||||||
self.visualgen.generate()
|
visualgen.generate()
|
||||||
|
|
||||||
# Inject Plugins Lua Scripts
|
# Inject Plugins Lua Scripts
|
||||||
listOfPluginsScripts = []
|
listOfPluginsScripts = []
|
||||||
@ -324,19 +324,20 @@ class Operation:
|
|||||||
trigger.add_action(DoScript(String(lua)))
|
trigger.add_action(DoScript(String(lua)))
|
||||||
self.current_mission.triggerrules.triggers.append(trigger)
|
self.current_mission.triggerrules.triggers.append(trigger)
|
||||||
|
|
||||||
self.assign_channels_to_flights()
|
self.assign_channels_to_flights(airgen.flights,
|
||||||
|
airsupportgen.air_support)
|
||||||
|
|
||||||
kneeboard_generator = KneeboardGenerator(self.current_mission)
|
kneeboard_generator = KneeboardGenerator(self.current_mission)
|
||||||
|
|
||||||
for dynamic_runway in self.groundobjectgen.runways.values():
|
for dynamic_runway in groundobjectgen.runways.values():
|
||||||
self.briefinggen.add_dynamic_runway(dynamic_runway)
|
self.briefinggen.add_dynamic_runway(dynamic_runway)
|
||||||
|
|
||||||
for tanker in self.airsupportgen.air_support.tankers:
|
for tanker in airsupportgen.air_support.tankers:
|
||||||
self.briefinggen.add_tanker(tanker)
|
self.briefinggen.add_tanker(tanker)
|
||||||
kneeboard_generator.add_tanker(tanker)
|
kneeboard_generator.add_tanker(tanker)
|
||||||
|
|
||||||
if self.is_awacs_enabled:
|
if self.is_awacs_enabled:
|
||||||
for awacs in self.airsupportgen.air_support.awacs:
|
for awacs in airsupportgen.air_support.awacs:
|
||||||
self.briefinggen.add_awacs(awacs)
|
self.briefinggen.add_awacs(awacs)
|
||||||
kneeboard_generator.add_awacs(awacs)
|
kneeboard_generator.add_awacs(awacs)
|
||||||
|
|
||||||
@ -344,21 +345,23 @@ class Operation:
|
|||||||
self.briefinggen.add_jtac(jtac)
|
self.briefinggen.add_jtac(jtac)
|
||||||
kneeboard_generator.add_jtac(jtac)
|
kneeboard_generator.add_jtac(jtac)
|
||||||
|
|
||||||
for flight in self.airgen.flights:
|
for flight in airgen.flights:
|
||||||
self.briefinggen.add_flight(flight)
|
self.briefinggen.add_flight(flight)
|
||||||
kneeboard_generator.add_flight(flight)
|
kneeboard_generator.add_flight(flight)
|
||||||
|
|
||||||
self.briefinggen.generate()
|
self.briefinggen.generate()
|
||||||
kneeboard_generator.generate()
|
kneeboard_generator.generate()
|
||||||
|
|
||||||
def assign_channels_to_flights(self) -> None:
|
def assign_channels_to_flights(self, flights: List[FlightData],
|
||||||
|
air_support: AirSupport) -> None:
|
||||||
"""Assigns preset radio channels for client flights."""
|
"""Assigns preset radio channels for client flights."""
|
||||||
for flight in self.airgen.flights:
|
for flight in flights:
|
||||||
if not flight.client_units:
|
if not flight.client_units:
|
||||||
continue
|
continue
|
||||||
self.assign_channels_to_flight(flight)
|
self.assign_channels_to_flight(flight, air_support)
|
||||||
|
|
||||||
def assign_channels_to_flight(self, flight: FlightData) -> None:
|
def assign_channels_to_flight(self, flight: FlightData,
|
||||||
|
air_support: AirSupport) -> None:
|
||||||
"""Assigns preset radio channels for a client flight."""
|
"""Assigns preset radio channels for a client flight."""
|
||||||
airframe = flight.aircraft_type
|
airframe = flight.aircraft_type
|
||||||
|
|
||||||
@ -369,4 +372,5 @@ class Operation:
|
|||||||
return
|
return
|
||||||
|
|
||||||
aircraft_data.channel_allocator.assign_channels_for_flight(
|
aircraft_data.channel_allocator.assign_channels_for_flight(
|
||||||
flight, self.airsupportgen.air_support)
|
flight, air_support
|
||||||
|
)
|
||||||
|
|||||||
82
resources/campaigns/battle_of_britain.json
Normal file
82
resources/campaigns/battle_of_britain.json
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
{
|
||||||
|
"name": "The Channel - Battle of Britain",
|
||||||
|
"theater": "The Channel",
|
||||||
|
"player_points": [
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Hawkinge",
|
||||||
|
"size": 600,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Lympne",
|
||||||
|
"size": 600,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Manston",
|
||||||
|
"size": 600,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "High Halden",
|
||||||
|
"size": 600,
|
||||||
|
"importance": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"enemy_points": [
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Dunkirk Mardyck",
|
||||||
|
"size": 600,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Saint Omer Longuenesse",
|
||||||
|
"size": 600,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Merville Calonne",
|
||||||
|
"size": 600,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Abbeville Drucat",
|
||||||
|
"size": 600,
|
||||||
|
"importance": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"links": [
|
||||||
|
[
|
||||||
|
"Hawkinge",
|
||||||
|
"Lympne"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Hawkinge",
|
||||||
|
"Manston"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"High Halden",
|
||||||
|
"Lympne"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Dunkirk Mardyck",
|
||||||
|
"Saint Omer Longuenesse"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Merville Calonne",
|
||||||
|
"Saint Omer Longuenesse"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Abbeville Drucat",
|
||||||
|
"Saint Omer Longuenesse"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
58
resources/campaigns/desert_war.json
Normal file
58
resources/campaigns/desert_war.json
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
{
|
||||||
|
"name": "Persian Gulf - Desert War",
|
||||||
|
"theater": "Persian Gulf",
|
||||||
|
"player_points": [
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Liwa Airbase",
|
||||||
|
"size": 2000,
|
||||||
|
"importance": 1.2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "lha",
|
||||||
|
"id": 1002,
|
||||||
|
"x": -164000,
|
||||||
|
"y": -257000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "carrier",
|
||||||
|
"id": 1001,
|
||||||
|
"x": -124000,
|
||||||
|
"y": -303000
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"enemy_points": [
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Al Ain International Airport",
|
||||||
|
"size": 2000,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Al Maktoum Intl",
|
||||||
|
"size": 2000,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Al Minhad AB",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"links": [
|
||||||
|
[
|
||||||
|
"Al Ain International Airport",
|
||||||
|
"Liwa Airbase"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Al Ain International Airport",
|
||||||
|
"Al Maktoum Intl"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Al Maktoum Intl",
|
||||||
|
"Al Minhad AB"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
72
resources/campaigns/dunkirk.json
Normal file
72
resources/campaigns/dunkirk.json
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
{
|
||||||
|
"name": "The Channel - Dunkirk",
|
||||||
|
"theater": "The Channel",
|
||||||
|
"player_points": [
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Hawkinge",
|
||||||
|
"size": 600,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Lympne",
|
||||||
|
"size": 600,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Manston",
|
||||||
|
"size": 600,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Dunkirk Mardyck",
|
||||||
|
"size": 600,
|
||||||
|
"importance": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"enemy_points": [
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Saint Omer Longuenesse",
|
||||||
|
"size": 600,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Merville Calonne",
|
||||||
|
"size": 600,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Abbeville Drucat",
|
||||||
|
"size": 600,
|
||||||
|
"importance": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"links": [
|
||||||
|
[
|
||||||
|
"Hawkinge",
|
||||||
|
"Lympne"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Hawkinge",
|
||||||
|
"Manston"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Dunkirk Mardyck",
|
||||||
|
"Saint Omer Longuenesse"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Merville Calonne",
|
||||||
|
"Saint Omer Longuenesse"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Abbeville Drucat",
|
||||||
|
"Saint Omer Longuenesse"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
103
resources/campaigns/emirates.json
Normal file
103
resources/campaigns/emirates.json
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
{
|
||||||
|
"name": "Persian Gulf - Emirates",
|
||||||
|
"theater": "Persian Gulf",
|
||||||
|
"player_points": [
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Fujairah Intl",
|
||||||
|
"radials": [
|
||||||
|
180,
|
||||||
|
225,
|
||||||
|
270,
|
||||||
|
315,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "lha",
|
||||||
|
"id": 1002,
|
||||||
|
"x": -79770,
|
||||||
|
"y": 49430
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "carrier",
|
||||||
|
"id": 1001,
|
||||||
|
"x": -61770,
|
||||||
|
"y": 69039
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"enemy_points": [
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Al Dhafra AB",
|
||||||
|
"size": 2000,
|
||||||
|
"importance": 1.2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Al Ain International Airport",
|
||||||
|
"size": 2000,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Al Maktoum Intl",
|
||||||
|
"size": 2000,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Al Minhad AB",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Sharjah Intl",
|
||||||
|
"size": 2000,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Ras Al Khaimah",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"links": [
|
||||||
|
[
|
||||||
|
"Al Ain International Airport",
|
||||||
|
"Al Dhafra AB"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Al Dhafra AB",
|
||||||
|
"Al Maktoum Intl"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Al Ain International Airport",
|
||||||
|
"Fujairah Intl"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Al Ain International Airport",
|
||||||
|
"Al Maktoum Intl"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Al Maktoum Intl",
|
||||||
|
"Al Minhad AB"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Al Minhad AB",
|
||||||
|
"Sharjah Intl"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Ras Al Khaimah",
|
||||||
|
"Sharjah Intl"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Fujairah Intl",
|
||||||
|
"Sharjah Intl"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
180
resources/campaigns/full_map.json
Normal file
180
resources/campaigns/full_map.json
Normal file
@ -0,0 +1,180 @@
|
|||||||
|
{
|
||||||
|
"name": "Syria - Full Map",
|
||||||
|
"theater": "Syria",
|
||||||
|
"player_points": [
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Ramat David",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1.4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "carrier",
|
||||||
|
"id": 1001,
|
||||||
|
"x": -151000,
|
||||||
|
"y": -106000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "lha",
|
||||||
|
"id": 1002,
|
||||||
|
"x": -131000,
|
||||||
|
"y": -161000
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"enemy_points": [
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "King Hussein Air College",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1.4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Khalkhalah",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1.2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Al-Dumayr",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1.2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Al Qusayr",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Rene Mouawad",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1.4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Hama",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Bassel Al-Assad",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1.4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Palmyra",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Tabqa",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Jirah",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Aleppo",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1.2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Minakh",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Hatay",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1.4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Incirlik",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1.4
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"links": [
|
||||||
|
[
|
||||||
|
"King Hussein Air College",
|
||||||
|
"Ramat David"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Khalkhalah",
|
||||||
|
"King Hussein Air College"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Al-Dumayr",
|
||||||
|
"Khalkhalah"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Al Qusayr",
|
||||||
|
"Al-Dumayr"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Al Qusayr",
|
||||||
|
"Hama"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Al Qusayr",
|
||||||
|
"Palmyra"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Al Qusayr",
|
||||||
|
"Rene Mouawad"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Bassel Al-Assad",
|
||||||
|
"Rene Mouawad"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Aleppo",
|
||||||
|
"Hama"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Bassel Al-Assad",
|
||||||
|
"Hama"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Bassel Al-Assad",
|
||||||
|
"Hatay"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Palmyra",
|
||||||
|
"Tabqa"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Jirah",
|
||||||
|
"Tabqa"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Aleppo",
|
||||||
|
"Jirah"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Aleppo",
|
||||||
|
"Minakh"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Hatay",
|
||||||
|
"Minakh"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Incirlik",
|
||||||
|
"Minakh"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
78
resources/campaigns/golan_heights_battle.json
Normal file
78
resources/campaigns/golan_heights_battle.json
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
{
|
||||||
|
"name": "Syria - Golan heights battle",
|
||||||
|
"theater": "Syria",
|
||||||
|
"player_points": [
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Ramat David",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1.4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "carrier",
|
||||||
|
"id": 1001,
|
||||||
|
"x": -280000,
|
||||||
|
"y": -238000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "lha",
|
||||||
|
"id": 1002,
|
||||||
|
"x": -237000,
|
||||||
|
"y": -89800
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"enemy_points": [
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Khalkhalah",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1.2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "King Hussein Air College",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1.4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Marj Ruhayyil",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Mezzeh",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1.2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Al-Dumayr",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1.2
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"links": [
|
||||||
|
[
|
||||||
|
"Khalkhalah",
|
||||||
|
"Ramat David"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Khalkhalah",
|
||||||
|
"King Hussein Air College"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Khalkhalah",
|
||||||
|
"Marj Ruhayyil"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Marj Ruhayyil",
|
||||||
|
"Mezzeh"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Al-Dumayr",
|
||||||
|
"Marj Ruhayyil"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
78
resources/campaigns/inherent_resolve.json
Normal file
78
resources/campaigns/inherent_resolve.json
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
{
|
||||||
|
"name": "Syria - Inherent Resolve",
|
||||||
|
"theater": "Syria",
|
||||||
|
"player_points": [
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "King Hussein Air College",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1.4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Incirlik",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1.4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "carrier",
|
||||||
|
"id": 1001,
|
||||||
|
"x": -210000,
|
||||||
|
"y": -200000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "lha",
|
||||||
|
"id": 1002,
|
||||||
|
"x": -131000,
|
||||||
|
"y": -161000
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"enemy_points": [
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Khalkhalah",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1.2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Palmyra",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Tabqa",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Jirah",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"links": [
|
||||||
|
[
|
||||||
|
"Khalkhalah",
|
||||||
|
"King Hussein Air College"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Incirlik",
|
||||||
|
"Incirlik"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Khalkhalah",
|
||||||
|
"Palmyra"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Palmyra",
|
||||||
|
"Tabqa"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Jirah",
|
||||||
|
"Tabqa"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
84
resources/campaigns/invasion_from_turkey.json
Normal file
84
resources/campaigns/invasion_from_turkey.json
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
{
|
||||||
|
"name": "Syria - Invasion from Turkey",
|
||||||
|
"theater": "Syria",
|
||||||
|
"player_points": [
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Incirlik",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1.4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Hatay",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1.4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "carrier",
|
||||||
|
"id": 1001,
|
||||||
|
"x": 133000,
|
||||||
|
"y": -54000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "lha",
|
||||||
|
"id": 1002,
|
||||||
|
"x": 155000,
|
||||||
|
"y": -19000
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"enemy_points": [
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Minakh",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Aleppo",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1.2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Kuweires",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Jirah",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Tabqa",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"links": [
|
||||||
|
[
|
||||||
|
"Hatay",
|
||||||
|
"Minakh"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Aleppo",
|
||||||
|
"Minakh"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Aleppo",
|
||||||
|
"Kuweires"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Jirah",
|
||||||
|
"Kuweires"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Jirah",
|
||||||
|
"Tabqa"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
140
resources/campaigns/invasion_of_iran.json
Normal file
140
resources/campaigns/invasion_of_iran.json
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
{
|
||||||
|
"name": "Persian Gulf - Invasion of Iran",
|
||||||
|
"theater": "Persian Gulf",
|
||||||
|
"player_points": [
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Ras Al Khaimah",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1.2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Khasab",
|
||||||
|
"size": 600,
|
||||||
|
"importance": 1.2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Qeshm Island",
|
||||||
|
"radials": [
|
||||||
|
270,
|
||||||
|
315,
|
||||||
|
0,
|
||||||
|
45,
|
||||||
|
90,
|
||||||
|
135,
|
||||||
|
180
|
||||||
|
],
|
||||||
|
"size": 600,
|
||||||
|
"importance": 1.1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Havadarya",
|
||||||
|
"radials": [
|
||||||
|
225,
|
||||||
|
270,
|
||||||
|
315,
|
||||||
|
0,
|
||||||
|
45
|
||||||
|
],
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1.4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Bandar Abbas Intl",
|
||||||
|
"size": 2000,
|
||||||
|
"importance": 1.4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "carrier",
|
||||||
|
"id": 1001,
|
||||||
|
"x": 59514.324335475,
|
||||||
|
"y": 28165.517980635
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "lha",
|
||||||
|
"id": 1002,
|
||||||
|
"x": -27500.813952358,
|
||||||
|
"y": -147000.65947136
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"enemy_points": [
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Bandar Lengeh",
|
||||||
|
"radials": [
|
||||||
|
270,
|
||||||
|
315,
|
||||||
|
0,
|
||||||
|
45
|
||||||
|
],
|
||||||
|
"size": 600,
|
||||||
|
"importance": 1.4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Shiraz International Airport",
|
||||||
|
"size": 2000,
|
||||||
|
"importance": 1.4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Jiroft Airport",
|
||||||
|
"size": 2000,
|
||||||
|
"importance": 1.4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Kerman Airport",
|
||||||
|
"size": 2000,
|
||||||
|
"importance": 1.4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Lar Airbase",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1.4
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"links": [
|
||||||
|
[
|
||||||
|
"Khasab",
|
||||||
|
"Ras Al Khaimah"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Bandar Lengeh",
|
||||||
|
"Lar Airbase"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Havadarya",
|
||||||
|
"Lar Airbase"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Bandar Abbas Intl",
|
||||||
|
"Havadarya"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Bandar Abbas Intl",
|
||||||
|
"Jiroft Airport"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Lar Airbase",
|
||||||
|
"Shiraz International Airport"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Kerman Airport",
|
||||||
|
"Shiraz International Airport"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Jiroft Airport",
|
||||||
|
"Kerman Airport"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Kerman Airport",
|
||||||
|
"Lar Airbase"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
74
resources/campaigns/invasion_of_iran_[lite].json
Normal file
74
resources/campaigns/invasion_of_iran_[lite].json
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
{
|
||||||
|
"name": "Persian Gulf - Invasion of Iran [Lite]",
|
||||||
|
"theater": "Persian Gulf",
|
||||||
|
"player_points": [
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Bandar Lengeh",
|
||||||
|
"radials": [
|
||||||
|
270,
|
||||||
|
315,
|
||||||
|
0,
|
||||||
|
45
|
||||||
|
],
|
||||||
|
"size": 600,
|
||||||
|
"importance": 1.4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "carrier",
|
||||||
|
"id": 1001,
|
||||||
|
"x": 72000.324335475,
|
||||||
|
"y": -376000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "lha",
|
||||||
|
"id": 1002,
|
||||||
|
"x": -27500.813952358,
|
||||||
|
"y": -147000.65947136
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"enemy_points": [
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Shiraz International Airport",
|
||||||
|
"size": 2000,
|
||||||
|
"importance": 1.4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Jiroft Airport",
|
||||||
|
"size": 2000,
|
||||||
|
"importance": 1.4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Kerman Airport",
|
||||||
|
"size": 2000,
|
||||||
|
"importance": 1.4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Lar Airbase",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1.4
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"links": [
|
||||||
|
[
|
||||||
|
"Bandar Lengeh",
|
||||||
|
"Lar Airbase"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Lar Airbase",
|
||||||
|
"Shiraz International Airport"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Kerman Airport",
|
||||||
|
"Shiraz International Airport"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Jiroft Airport",
|
||||||
|
"Kerman Airport"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
82
resources/campaigns/normandy.json
Normal file
82
resources/campaigns/normandy.json
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
{
|
||||||
|
"name": "Normandy - Normandy",
|
||||||
|
"theater": "Normandy",
|
||||||
|
"player_points": [
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Chailey",
|
||||||
|
"size": 600,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Needs Oar Point",
|
||||||
|
"size": 600,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Deux Jumeaux",
|
||||||
|
"size": 600,
|
||||||
|
"importance": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"enemy_points": [
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Lignerolles",
|
||||||
|
"size": 600,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Lessay",
|
||||||
|
"size": 600,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Carpiquet",
|
||||||
|
"size": 600,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Maupertus",
|
||||||
|
"size": 600,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Evreux",
|
||||||
|
"size": 600,
|
||||||
|
"importance": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"links": [
|
||||||
|
[
|
||||||
|
"Chailey",
|
||||||
|
"Needs Oar Point"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Deux Jumeaux",
|
||||||
|
"Lignerolles"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Lessay",
|
||||||
|
"Lignerolles"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Carpiquet",
|
||||||
|
"Lignerolles"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Lessay",
|
||||||
|
"Maupertus"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Carpiquet",
|
||||||
|
"Evreux"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
56
resources/campaigns/normandy_small.json
Normal file
56
resources/campaigns/normandy_small.json
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
{
|
||||||
|
"name": "Normandy - Normandy Small",
|
||||||
|
"theater": "Normandy",
|
||||||
|
"player_points": [
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Needs Oar Point",
|
||||||
|
"size": 600,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Deux Jumeaux",
|
||||||
|
"size": 600,
|
||||||
|
"importance": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"enemy_points": [
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Lignerolles",
|
||||||
|
"size": 600,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Carpiquet",
|
||||||
|
"size": 600,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Evreux",
|
||||||
|
"size": 600,
|
||||||
|
"importance": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"links": [
|
||||||
|
[
|
||||||
|
"Needs Oar Point",
|
||||||
|
"Needs Oar Point"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Deux Jumeaux",
|
||||||
|
"Lignerolles"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Carpiquet",
|
||||||
|
"Lignerolles"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Carpiquet",
|
||||||
|
"Evreux"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
96
resources/campaigns/north_caucasus.json
Normal file
96
resources/campaigns/north_caucasus.json
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
{
|
||||||
|
"name": "Caucasus - North Caucasus",
|
||||||
|
"theater": "Caucasus",
|
||||||
|
"player_points": [
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Kutaisi",
|
||||||
|
"size": 600,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Vaziani",
|
||||||
|
"size": 600,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "carrier",
|
||||||
|
"id": 1001,
|
||||||
|
"x": -285810.6875,
|
||||||
|
"y": 496399.1875
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "lha",
|
||||||
|
"id": 1002,
|
||||||
|
"x": -326050.6875,
|
||||||
|
"y": 519452.1875
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"enemy_points": [
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Beslan",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Nalchik",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1.1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Mozdok",
|
||||||
|
"size": 2000,
|
||||||
|
"importance": 1.1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Mineralnye Vody",
|
||||||
|
"size": 2000,
|
||||||
|
"importance": 1.3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Maykop-Khanskaya",
|
||||||
|
"size": 3000,
|
||||||
|
"importance": 1.4
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"links": [
|
||||||
|
[
|
||||||
|
"Kutaisi",
|
||||||
|
"Vaziani"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Beslan",
|
||||||
|
"Vaziani"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Beslan",
|
||||||
|
"Mozdok"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Beslan",
|
||||||
|
"Nalchik"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Mozdok",
|
||||||
|
"Nalchik"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Mineralnye Vody",
|
||||||
|
"Nalchik"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Mineralnye Vody",
|
||||||
|
"Mozdok"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Maykop-Khanskaya",
|
||||||
|
"Mineralnye Vody"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
70
resources/campaigns/north_nevada.json
Normal file
70
resources/campaigns/north_nevada.json
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
{
|
||||||
|
"name": "Nevada - North Nevada",
|
||||||
|
"theater": "Nevada",
|
||||||
|
"player_points": [
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Nellis AFB",
|
||||||
|
"size": 2000,
|
||||||
|
"importance": 1.4
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"enemy_points": [
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Tonopah Test Range Airfield",
|
||||||
|
"size": 600,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Lincoln County",
|
||||||
|
"size": 600,
|
||||||
|
"importance": 1.2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Groom Lake AFB",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1.4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Creech AFB",
|
||||||
|
"size": 2000,
|
||||||
|
"importance": 1.4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Mesquite",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1.3
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"links": [
|
||||||
|
[
|
||||||
|
"Lincoln County",
|
||||||
|
"Tonopah Test Range Airfield"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Groom Lake AFB",
|
||||||
|
"Tonopah Test Range Airfield"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Lincoln County",
|
||||||
|
"Mesquite"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Groom Lake AFB",
|
||||||
|
"Mesquite"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Creech AFB",
|
||||||
|
"Groom Lake AFB"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Creech AFB",
|
||||||
|
"Nellis AFB"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
36
resources/campaigns/russia_small.json
Normal file
36
resources/campaigns/russia_small.json
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"name": "Caucasus - Russia Small",
|
||||||
|
"theater": "Caucasus",
|
||||||
|
"player_points": [
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Mozdok",
|
||||||
|
"size": 2000,
|
||||||
|
"importance": 1.1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"enemy_points": [
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Mineralnye Vody",
|
||||||
|
"size": 2000,
|
||||||
|
"importance": 1.3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Maykop-Khanskaya",
|
||||||
|
"size": 3000,
|
||||||
|
"importance": 1.4
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"links": [
|
||||||
|
[
|
||||||
|
"Mineralnye Vody",
|
||||||
|
"Mozdok"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Maykop-Khanskaya",
|
||||||
|
"Mineralnye Vody"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
88
resources/campaigns/syrian_civil_war.json
Normal file
88
resources/campaigns/syrian_civil_war.json
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
{
|
||||||
|
"name": "Syria - Syrian Civil War",
|
||||||
|
"theater": "Syria",
|
||||||
|
"player_points": [
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Bassel Al-Assad",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1.4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Marj Ruhayyil",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "carrier",
|
||||||
|
"id": 1001,
|
||||||
|
"x": 18537,
|
||||||
|
"y": -52000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "lha",
|
||||||
|
"id": 1002,
|
||||||
|
"x": 116000,
|
||||||
|
"y": -30000
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"enemy_points": [
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Hama",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Aleppo",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1.2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Al Qusayr",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Palmyra",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Al-Dumayr",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1.2
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"links": [
|
||||||
|
[
|
||||||
|
"Bassel Al-Assad",
|
||||||
|
"Hama"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Al-Dumayr",
|
||||||
|
"Marj Ruhayyil"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Aleppo",
|
||||||
|
"Hama"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Al Qusayr",
|
||||||
|
"Hama"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Al Qusayr",
|
||||||
|
"Al-Dumayr"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Al Qusayr",
|
||||||
|
"Palmyra"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
108
resources/campaigns/western_georgia.json
Normal file
108
resources/campaigns/western_georgia.json
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
{
|
||||||
|
"name": "Caucasus - Western Georgia",
|
||||||
|
"theater": "Caucasus",
|
||||||
|
"player_points": [
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Kobuleti",
|
||||||
|
"radials": [
|
||||||
|
0,
|
||||||
|
45,
|
||||||
|
90,
|
||||||
|
135,
|
||||||
|
180,
|
||||||
|
225,
|
||||||
|
315
|
||||||
|
],
|
||||||
|
"size": 600,
|
||||||
|
"importance": 1.1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "carrier",
|
||||||
|
"id": 1001,
|
||||||
|
"x": -285810.6875,
|
||||||
|
"y": 496399.1875
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "lha",
|
||||||
|
"id": 1002,
|
||||||
|
"x": -326050.6875,
|
||||||
|
"y": 519452.1875
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"enemy_points": [
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Kutaisi",
|
||||||
|
"size": 600,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Senaki-Kolkhi",
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Sukhumi-Babushara",
|
||||||
|
"radials": [
|
||||||
|
315,
|
||||||
|
0,
|
||||||
|
45,
|
||||||
|
90,
|
||||||
|
135
|
||||||
|
],
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1.2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Gudauta",
|
||||||
|
"radials": [
|
||||||
|
315,
|
||||||
|
0,
|
||||||
|
45,
|
||||||
|
90,
|
||||||
|
135
|
||||||
|
],
|
||||||
|
"size": 1000,
|
||||||
|
"importance": 1.2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "airbase",
|
||||||
|
"id": "Sochi-Adler",
|
||||||
|
"radials": [
|
||||||
|
315,
|
||||||
|
0,
|
||||||
|
45,
|
||||||
|
90,
|
||||||
|
135
|
||||||
|
],
|
||||||
|
"size": 2000,
|
||||||
|
"importance": 1.4
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"links": [
|
||||||
|
[
|
||||||
|
"Kutaisi",
|
||||||
|
"Senaki-Kolkhi"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Kobuleti",
|
||||||
|
"Senaki-Kolkhi"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Senaki-Kolkhi",
|
||||||
|
"Sukhumi-Babushara"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Gudauta",
|
||||||
|
"Sukhumi-Babushara"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Gudauta",
|
||||||
|
"Sochi-Adler"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user