diff --git a/changelog.md b/changelog.md index eb19a474..63d218bd 100644 --- a/changelog.md +++ b/changelog.md @@ -48,6 +48,9 @@ Saves from 2.3 are not compatible with 2.4. * **[Units]** Pyotr Velikiy cruiser has been removed for now as it's nearly unkillable. * **[Units]** Submarines have been removed for now as they aren't wholly functional. * **[Units]** Fixed "FACTION ERROR : Unable to find OliverHazardPerryGroupGenerator in pydcs" error at startup. +* **[Flight Planner]** Fixed not being able to create custom waypoints for buildings. +* **[Flight Planner]** Strike missions will no longer be automatically planned against SAMs. +* **[Flight Planner]** Strike missions will no longer be automatically planned against FOB structures. # 2.3.4 diff --git a/game/db.py b/game/db.py index a3c0e740..efd39ee5 100644 --- a/game/db.py +++ b/game/db.py @@ -1385,7 +1385,7 @@ def unit_get_expanded_info(country_name: str, unit_type, request_type: str) -> s faction_value = faction_exists.get(request_type) if default_value is None: if request_type == "text": - return "I hate to say it, but it looks like the unit you're searching for doesn't exist. Perhaps the archives are incomplete..." + return "WIP - This unit doesn't have any description text yet." if request_type == "name": return original_name else: diff --git a/gen/flights/ai_flight_planner.py b/gen/flights/ai_flight_planner.py index 45c9d1e6..f4479cf5 100644 --- a/gen/flights/ai_flight_planner.py +++ b/gen/flights/ai_flight_planner.py @@ -26,6 +26,7 @@ from game.procurement import AircraftProcurementRequest from game.theater import ( Airfield, ControlPoint, + Fob, FrontLine, MissionTarget, OffMapSpawn, @@ -33,6 +34,7 @@ from game.theater import ( TheaterGroundObject, ) from game.theater.theatergroundobject import ( + BuildingGroundObject, EwrGroundObject, NavalGroundObject, VehicleGroupGroundObject, @@ -346,12 +348,35 @@ class ObjectiveFinder: found_targets: Set[str] = set() for enemy_cp in self.enemy_control_points(): for ground_object in enemy_cp.ground_objects: + # TODO: Reuse ground_object.mission_types. + # The mission types for ground objects are currently not + # accurate because we include things like strike and BAI for all + # targets since they have different planning behavior (waypoint + # generation is better for players with strike when the targets + # are stationary, AI behavior against weaker air defenses is + # better with BAI), so that's not a useful filter. Once we have + # better control over planning profiles and target dependent + # loadouts we can clean this up. if isinstance(ground_object, VehicleGroupGroundObject): # BAI target, not strike target. continue + if isinstance(ground_object, NavalGroundObject): # Anti-ship target, not strike target. continue + + if isinstance(ground_object, SamGroundObject): + # SAMs are targeted by DEAD. No need to double plan. + continue + + is_building = isinstance(ground_object, BuildingGroundObject) + is_fob = isinstance(enemy_cp, Fob) + if is_building and is_fob and ground_object.airbase_group: + # This is the FOB structure itself. Can't be repaired or + # targeted by the player, so shouldn't be targetable by the + # AI. + continue + if ground_object.is_dead: continue if ground_object.name in found_targets: diff --git a/qt_ui/widgets/combos/QPredefinedWaypointSelectionComboBox.py b/qt_ui/widgets/combos/QPredefinedWaypointSelectionComboBox.py index d3e266b5..8bb72d81 100644 --- a/qt_ui/widgets/combos/QPredefinedWaypointSelectionComboBox.py +++ b/qt_ui/widgets/combos/QPredefinedWaypointSelectionComboBox.py @@ -71,7 +71,7 @@ class QPredefinedWaypointSelectionComboBox(QFilteredComboBox): for cp in self.game.theater.controlpoints: if (self.include_enemy and not cp.captured) or (self.include_friendly and cp.captured): for ground_object in cp.ground_objects: - if not ground_object.is_dead and not isinstance(ground_object, BuildingGroundObject): + if not ground_object.is_dead and isinstance(ground_object, BuildingGroundObject): wpt = FlightWaypoint( FlightWaypointType.CUSTOM, ground_object.position.x, diff --git a/resources/ui/units/aircrafts/banners/Mi-24V_24.jpg b/resources/ui/units/aircrafts/banners/Mi-24V_24.jpg new file mode 100644 index 00000000..14b5dca1 Binary files /dev/null and b/resources/ui/units/aircrafts/banners/Mi-24V_24.jpg differ diff --git a/resources/ui/units/aircrafts/banners/Mi-8MT_24.jpg b/resources/ui/units/aircrafts/banners/Mi-8MT_24.jpg new file mode 100644 index 00000000..199c3241 Binary files /dev/null and b/resources/ui/units/aircrafts/banners/Mi-8MT_24.jpg differ diff --git a/resources/ui/units/aircrafts/banners/Su-25_25.jpg b/resources/ui/units/aircrafts/banners/Su-25_25.jpg new file mode 100644 index 00000000..249ab7e6 Binary files /dev/null and b/resources/ui/units/aircrafts/banners/Su-25_25.jpg differ diff --git a/resources/ui/units/aircrafts/banners/Su-30_24.jpg b/resources/ui/units/aircrafts/banners/Su-30_24.jpg new file mode 100644 index 00000000..9441d321 Binary files /dev/null and b/resources/ui/units/aircrafts/banners/Su-30_24.jpg differ diff --git a/resources/ui/units/vehicles/banners/BMP-1_24.jpg b/resources/ui/units/vehicles/banners/BMP-1_24.jpg new file mode 100644 index 00000000..18beb605 Binary files /dev/null and b/resources/ui/units/vehicles/banners/BMP-1_24.jpg differ diff --git a/resources/units/unit_info_text.json b/resources/units/unit_info_text.json index cf032bd9..911fdd89 100644 --- a/resources/units/unit_info_text.json +++ b/resources/units/unit_info_text.json @@ -813,6 +813,13 @@ "manufacturer": "Sukhoi", "role": "Multirole Fighter", "year-of-variant-introduction": "1996" + }, + "China": { + "name": "Su-30MKK Flanker-G", + "country-of-origin": "USSR/Russia", + "manufacturer": "Sukhoi", + "role": "Multirole Fighter", + "year-of-variant-introduction": "2000" } }], "Su-33": [{ @@ -821,8 +828,15 @@ "text": "The Su-33 has been the backbone of Russian aircraft carrier aviation since the late 1990s and is an all-weather fighter capable of engaging both air and surface targets. Based on the powerful Su-27 \"Flanker\", the Su-33 is a navalized version suited for operations aboard the Admiral Kuznetsov aircraft carrier. Changes to the Su-33 include strengthened landing gear, folding wings, more powerful engines, and the very visible canards.\n\nThe Su-33 is equipped with a powerful pulse doppler radar and an Infrared Search and Track (IRST) for engaging aerial targets with a wide range of radar- and infrared-guided missiles and its internal cannon. For air-to-surface attack, the Su-33 can be armed with many types of unguided bombs, rockets, and cluster munitions.\n\nDespite its large size, the Su-33 is very capable in a dogfight when combined with its integral helmet-mounted sight and off-boresight missiles.", "country-of-origin": "USSR/Russia", "manufacturer": "Sukhoi", - "role": "Multirole Fighter", + "role": "Carrier-based Multirole Fighter", "year-of-variant-introduction": "1998" + }, + "China": { + "name": "J-15 Flanker X-2", + "country-of-origin": "China", + "manufacturer": "Shenyang", + "role": "Carrier-based Multirole Fighter", + "year-of-variant-introduction": "2013" } }], "Su-34": [{