Added map theater : North Caucasus

This commit is contained in:
Khopa 2020-06-01 14:20:43 +02:00
parent 8132c7e676
commit 08c2972cf9
7 changed files with 84 additions and 25 deletions

View File

@ -1,19 +1,27 @@
2.0 RC 6 #2.0 RC 6
--------
Features/Improvements : Saves file from RC5 are not compatible with the new version.
* Supercarrier support (You have to go to settings to enable it, if you have the supercarrier module) Sorry :(
* Carrier ICLS channel will now be configured (check your briefing)
* When a base is captured, refill the "base defenses" group with units for the new owner.
* SAM units will spawn on RED Alarm state
* AI Flight planner now creates its own STRIKE flights
* Added performance settings to allow disabling : smoke, artillery strike, moving units, infantry, SAM alert mode.
* Added support for newest WW2 Units
Fixes : ##Features/Improvements :
* Fixed : CAS waypoints created from the "Predefined waypoint selector" would not be at the exact location of the frontline * **[Units/Factions]** Supercarrier support (You have to go to settings to enable it, if you have the supercarrier module)
* Fixed : Game generation does not work when "no night mission" settings was selected and the current time was "day" * **[Units/Factions]** Added 'Modern Bluefor' factions, containing all most popular DCS flyable units
* Fixed : Game generation does not work when the player selected faction has no AWACS * **[Units/Factions]** Factions US 2005 / 1990 will sometimes use Arleigh Burke instead of Perry as carrier escorts
* Fixed : Base defenses would not be generated on normandy map * **[Units/Factions]** Added support for newest WW2 Units
* Fixed : CAP mission flown from airbase are not named BARCAP anymore (CAP from carrier is still named BARCAP) * **[Campaign logic]** When a base is captured, refill the "base defenses" group with units for the new owner.
* **[Mission Generator]** Carrier ICLS channel will now be configured (check your briefing)
* **[Mission Generator]** SAM units will spawn on RED Alarm state
* **[Mission Generator]** AI Flight planner now creates its own STRIKE flights
* **[Mission Generator]** AI units assigned to Strike flight will now actually engage the buildings they have been assigned.
* **[Mission Generator]** Added performance settings to allow disabling : smoke, artillery strike, moving units, infantry, SAM Red alert mode.
* **[UX]** : Improved flight selection behaviour in the Mission Planning Window
##Fixed issues :
* **[Mission Generator]** Payloads were not correctly assigned in the release version.
* **[Mission Generator]** Game generation does not work when "no night mission" settings was selected and the current time was "day"
* **[Mission Generator]** Game generation does not work when the player selected faction has no AWACS
* **[Campaign Generator]** Base defenses would not be generated on Normandy map
* **[Mission Planning]** CAS waypoints created from the "Predefined waypoint selector" would not be at the exact location of the frontline
* **[Naming]** CAP mission flown from airbase are not named BARCAP anymore (CAP from carrier is still named BARCAP)

View File

@ -15,6 +15,7 @@ BLUEFOR_MODERN = {
JF_17, JF_17,
M_2000C, M_2000C,
F_5E_3, F_5E_3,
Su_27,
Su_25T, Su_25T,
A_10A, A_10A,

View File

@ -21,12 +21,13 @@ if __name__ == "__main__":
if os.path.exists(custom_payloads): if os.path.exists(custom_payloads):
dcs.planes.FlyingType.payload_dirs.append(custom_payloads) dcs.planes.FlyingType.payload_dirs.append(custom_payloads)
else: else:
# For release version the path is different.
custom_payloads = os.path.join(os.path.dirname(os.path.realpath(__file__)), custom_payloads = os.path.join(os.path.dirname(os.path.realpath(__file__)),
"resources\\customized_payloads") "resources\\customized_payloads")
if os.path.exists(custom_payloads): if os.path.exists(custom_payloads):
dcs.planes.FlyingType.payload_dirs.append(custom_payloads) dcs.planes.FlyingType.payload_dirs.append(custom_payloads)
VERSION_STRING = "2.0" VERSION_STRING = "2.0RC6"
logging_module.setup_version_string(VERSION_STRING) logging_module.setup_version_string(VERSION_STRING)
logging.info("Using {} as userdata folder".format(persistency.base_path())) logging.info("Using {} as userdata folder".format(persistency.base_path()))

View File

@ -38,6 +38,7 @@ class NewGameWizard(QtWidgets.QWizard):
isTerrainNttr = self.field("isTerrainNttr") isTerrainNttr = self.field("isTerrainNttr")
isTerrainCaucasusSmall = self.field("isTerrainCaucasusSmall") isTerrainCaucasusSmall = self.field("isTerrainCaucasusSmall")
isTerrainCaucasusSmallInverted = self.field("isTerrainCaucasusSmallInverted") isTerrainCaucasusSmallInverted = self.field("isTerrainCaucasusSmallInverted")
isTerrainCaucasusNorth= self.field("isTerrainCaucasusNorth")
isIranianCampaignTheater = self.field("isIranianCampaignTheater") isIranianCampaignTheater = self.field("isIranianCampaignTheater")
isTerrainNormandy = self.field("isTerrainNormandy") isTerrainNormandy = self.field("isTerrainNormandy")
isTerrainEmirates = self.field("isTerrainEmirates") isTerrainEmirates = self.field("isTerrainEmirates")
@ -56,6 +57,8 @@ class NewGameWizard(QtWidgets.QWizard):
conflicttheater = caucasus.WesternGeorgia() conflicttheater = caucasus.WesternGeorgia()
elif isTerrainCaucasusSmallInverted: elif isTerrainCaucasusSmallInverted:
conflicttheater = caucasus.WesternGeorgiaInverted() conflicttheater = caucasus.WesternGeorgiaInverted()
elif isTerrainCaucasusNorth:
conflicttheater = caucasus.NorthCaucasus()
elif isIranianCampaignTheater: elif isIranianCampaignTheater:
conflicttheater = persiangulf.IranianCampaign() conflicttheater = persiangulf.IranianCampaign()
elif isTerrainEmirates: elif isTerrainEmirates:
@ -218,12 +221,14 @@ class TheaterConfiguration(QtWidgets.QWizardPage):
# Terrain selection # Terrain selection
terrainGroup = QtWidgets.QGroupBox("Terrain") terrainGroup = QtWidgets.QGroupBox("Terrain")
terrainCaucasusSmall = QtWidgets.QRadioButton("Caucasus - Western Georgia [RECOMMENDED]") terrainCaucasusSmall = QtWidgets.QRadioButton("Caucasus - Western Georgia [RECOMMENDED - Early Cold War Era]")
terrainCaucasusSmall.setIcon(QtGui.QIcon(CONST.ICONS["Terrain_Caucasus"])) terrainCaucasusSmall.setIcon(QtGui.QIcon(CONST.ICONS["Terrain_Caucasus"]))
terrainCaucasusSmallInverted = QtWidgets.QRadioButton("Caucasus - Western Georgia Inverted [RECOMMENDED]") terrainCaucasusSmallInverted = QtWidgets.QRadioButton("Caucasus - Western Georgia Inverted [RECOMMENDED - Early Cold War Era]")
terrainCaucasusSmallInverted.setIcon(QtGui.QIcon(CONST.ICONS["Terrain_Caucasus"])) terrainCaucasusSmallInverted.setIcon(QtGui.QIcon(CONST.ICONS["Terrain_Caucasus"]))
terrainCaucasus = QtWidgets.QRadioButton("Caucasus - Full map [NOT TESTED]") terrainCaucasus = QtWidgets.QRadioButton("Caucasus - Full map [NOT TESTED]")
terrainCaucasus.setIcon(QtGui.QIcon(CONST.ICONS["Terrain_Caucasus"])) terrainCaucasus.setIcon(QtGui.QIcon(CONST.ICONS["Terrain_Caucasus"]))
terrainCaucasusNorth = QtWidgets.QRadioButton("Caucasus - North - [RECOMMENDED - Modern Era]")
terrainCaucasusNorth.setIcon(QtGui.QIcon(CONST.ICONS["Terrain_Caucasus"]))
terrainPg = QtWidgets.QRadioButton("Persian Gulf - Full Map [NOT TESTED]") terrainPg = QtWidgets.QRadioButton("Persian Gulf - Full Map [NOT TESTED]")
terrainPg.setIcon(QtGui.QIcon(CONST.ICONS["Terrain_Persian_Gulf"])) terrainPg.setIcon(QtGui.QIcon(CONST.ICONS["Terrain_Persian_Gulf"]))
@ -250,6 +255,7 @@ class TheaterConfiguration(QtWidgets.QWizardPage):
self.registerField('isTerrainCaucasus', terrainCaucasus) self.registerField('isTerrainCaucasus', terrainCaucasus)
self.registerField('isTerrainCaucasusSmall', terrainCaucasusSmall) self.registerField('isTerrainCaucasusSmall', terrainCaucasusSmall)
self.registerField('isTerrainCaucasusSmallInverted', terrainCaucasusSmallInverted) self.registerField('isTerrainCaucasusSmallInverted', terrainCaucasusSmallInverted)
self.registerField('isTerrainCaucasusNorth', terrainCaucasusNorth)
self.registerField('isTerrainPg', terrainPg) self.registerField('isTerrainPg', terrainPg)
self.registerField('isIranianCampaignTheater', terrainIran) self.registerField('isIranianCampaignTheater', terrainIran)
self.registerField('isTerrainEmirates', terrainEmirates) self.registerField('isTerrainEmirates', terrainEmirates)
@ -261,6 +267,7 @@ class TheaterConfiguration(QtWidgets.QWizardPage):
terrainGroupLayout = QtWidgets.QVBoxLayout() terrainGroupLayout = QtWidgets.QVBoxLayout()
terrainGroupLayout.addWidget(terrainCaucasusSmall) terrainGroupLayout.addWidget(terrainCaucasusSmall)
terrainGroupLayout.addWidget(terrainCaucasusSmallInverted) terrainGroupLayout.addWidget(terrainCaucasusSmallInverted)
terrainGroupLayout.addWidget(terrainCaucasusNorth)
terrainGroupLayout.addWidget(terrainCaucasus) terrainGroupLayout.addWidget(terrainCaucasus)
terrainGroupLayout.addWidget(terrainIran) terrainGroupLayout.addWidget(terrainIran)
terrainGroupLayout.addWidget(terrainEmirates) terrainGroupLayout.addWidget(terrainEmirates)

Binary file not shown.

Binary file not shown.

View File

@ -73,11 +73,6 @@ class CaucasusTheater(ConflictTheater):
self.carrier_1.captured = True self.carrier_1.captured = True
self.batumi.captured = True self.batumi.captured = True
def add_controlpoint(self, point: ControlPoint, connected_to: typing.Collection[ControlPoint] = []):
point.name = " ".join(re.split(r"[ -]", point.name)[:1])
super(CaucasusTheater, self).add_controlpoint(point, connected_to=connected_to)
""" """
A smaller version of the caucasus map in western georgia. A smaller version of the caucasus map in western georgia.
@ -161,3 +156,50 @@ class WesternGeorgiaInverted(ConflictTheater):
self.carrier_1.captured = True self.carrier_1.captured = True
self.sochi.captured = True self.sochi.captured = True
class NorthCaucasus(ConflictTheater):
terrain = caucasus.Caucasus()
overview_image = "caumap.gif"
reference_points = {(-317948.32727306, 635639.37385346): (278.5*4, 319*4),
(-355692.3067714, 617269.96285781): (263*4, 352*4), }
landmap = load_landmap("resources\\caulandmap.p")
daytime_map = {
"dawn": (6, 9),
"day": (9, 18),
"dusk": (18, 20),
"night": (0, 5),
}
carrier_1 = ControlPoint.carrier("Carrier", mapping.Point(-305810.6875, 406399.1875))
def __init__(self, load_ground_objects=True):
super(NorthCaucasus, self).__init__()
self.kutaisi = ControlPoint.from_airport(caucasus.Kutaisi, LAND, SIZE_SMALL, IMPORTANCE_LOW)
self.soganlug = ControlPoint.from_airport(caucasus.Soganlug, LAND, SIZE_SMALL, IMPORTANCE_LOW)
self.maykop = ControlPoint.from_airport(caucasus.Maykop_Khanskaya, LAND, SIZE_LARGE, IMPORTANCE_HIGH)
self.beslan = ControlPoint.from_airport(caucasus.Beslan, LAND, SIZE_REGULAR, IMPORTANCE_LOW)
self.nalchik = ControlPoint.from_airport(caucasus.Nalchik, LAND, SIZE_REGULAR, 1.1)
self.mineralnye = ControlPoint.from_airport(caucasus.Mineralnye_Vody, LAND, SIZE_BIG, 1.3)
self.mozdok = ControlPoint.from_airport(caucasus.Mozdok, LAND, SIZE_BIG, 1.1)
self.carrier_1 = ControlPoint.carrier("Carrier", mapping.Point(-285810.6875, 496399.1875))
self.soganlug.frontline_offset = 0.5
self.soganlug.base.strength = 1
self.add_controlpoint(self.kutaisi, connected_to=[self.soganlug])
self.add_controlpoint(self.soganlug, connected_to=[self.beslan, self.kutaisi])
self.add_controlpoint(self.beslan, connected_to=[self.soganlug, self.mozdok, self.nalchik])
self.add_controlpoint(self.nalchik, connected_to=[self.beslan, self.mozdok, self.mineralnye])
self.add_controlpoint(self.mozdok, connected_to=[self.nalchik, self.beslan, self.mineralnye])
self.add_controlpoint(self.mineralnye, connected_to=[self.nalchik, self.mozdok, self.maykop])
self.add_controlpoint(self.maykop, connected_to=[self.mineralnye])
self.add_controlpoint(self.carrier_1, connected_to=[])
self.carrier_1.captured = True
self.soganlug.captured = True
self.kutaisi.captured = True