diff --git a/changelog.md b/changelog.md index d17a2c1a..23eb1f62 100644 --- a/changelog.md +++ b/changelog.md @@ -138,6 +138,11 @@ Saves from 6.x are not compatible with 7.0. ## Fixes +* **[Campaign]** Fixed a longstanding bug where oversized airlifts could corrupt a save with empty convoys. +* **[Modding]** Fixed an issue where Falklands campaigns created or edited with new versions of DCS could not be loaded. +* **[Modding]** Fixed decoding of campaign yaml files to use UTF-8 rather than the system locale's default. It's now possible to use "Bf 109 K-4 Kurfürst" as a preferred aircraft type. + + # 6.1.1 ## Fixes diff --git a/game/campaignloader/campaign.py b/game/campaignloader/campaign.py index e93df4dd..61ee926f 100644 --- a/game/campaignloader/campaign.py +++ b/game/campaignloader/campaign.py @@ -60,7 +60,7 @@ class Campaign: @classmethod def from_file(cls, path: Path) -> Campaign: - with path.open() as campaign_file: + with path.open(encoding="utf-8") as campaign_file: data = yaml.safe_load(campaign_file) sanitized_theater = data["theater"].replace(" ", "") diff --git a/game/logging_config.py b/game/logging_config.py index 1774ee30..0a42b817 100644 --- a/game/logging_config.py +++ b/game/logging_config.py @@ -16,7 +16,7 @@ def init_logging(version: str) -> None: log_config = resources / "default_logging.yaml" if (custom_log_config := resources / "logging.yaml").exists(): log_config = custom_log_config - with log_config.open() as log_file: + with log_config.open(encoding="utf-8") as log_file: logging.config.dictConfig(yaml.safe_load(log_file)) logging.info(f"DCS Retribution {version}") diff --git a/game/theater/theaterloader.py b/game/theater/theaterloader.py index 075d1873..1534db83 100644 --- a/game/theater/theaterloader.py +++ b/game/theater/theaterloader.py @@ -96,13 +96,13 @@ class TheaterLoader: @property def menu_thumbnail_dcs_relative_path(self) -> Path: - with self.descriptor_path.open() as descriptor_file: + with self.descriptor_path.open(encoding="utf-8") as descriptor_file: data = yaml.safe_load(descriptor_file) name = data.get("pydcs_name", data["name"]) return Path("Mods/terrains") / name / "Theme/icon.png" def load(self) -> ConflictTheater: - with self.descriptor_path.open() as descriptor_file: + with self.descriptor_path.open(encoding="utf-8") as descriptor_file: data = yaml.safe_load(descriptor_file) return ConflictTheater( TERRAINS_BY_NAME[data.get("pydcs_name", data["name"])],