From 770bbb8a88ecc0a847649aee1af2e9500951bcd6 Mon Sep 17 00:00:00 2001 From: m4ko Date: Fri, 23 Oct 2026 21:34:51 +0200 Subject: [PATCH] Released new version 1.1.1, using GE-Proton as the default environment. --- RELEASE_README.md | 25 ++++++----- pyproject.toml | 2 +- src/ptlinux/__init__.py | 2 +- src/ptlinux/cli.py | 4 +- src/ptlinux/diagnostics/native_logs.py | 2 +- src/ptlinux/settings.py | 14 +++++- src/ptlinux/ui/dialogs/settings_dialog.py | 6 +-- updates/stable.json | 52 +++++++++++----------- updates/stable.json.sig | Bin 384 -> 384 bytes 9 files changed, 60 insertions(+), 47 deletions(-) diff --git a/RELEASE_README.md b/RELEASE_README.md index 1c71c09..296c952 100644 --- a/RELEASE_README.md +++ b/RELEASE_README.md @@ -1,6 +1,6 @@ # PristonTale EU for Linux -Version 1.0.8 installs, updates, repairs, and launches PristonTale EU through a +Version 1.1.1 installs, updates, repairs, and launches PristonTale EU through a native Linux dashboard. Game files come directly from the publisher and are not included in this archive. @@ -15,11 +15,11 @@ Then run: ```text openssl pkey -pubin -in launcher-update-public.pem -outform DER | sha256sum openssl dgst -sha256 -verify launcher-update-public.pem \ - -signature pristontale-eu-linux-installer-v1-0-8.tar.gz.sig \ - pristontale-eu-linux-installer-v1-0-8.tar.gz -sha256sum -c pristontale-eu-linux-installer-v1-0-8.tar.gz.sha256 -tar -xzf pristontale-eu-linux-installer-v1-0-8.tar.gz -cd pristontale-eu-linux-installer-v1-0-8 + -signature pristontale-eu-linux-installer-v1-1-1.tar.gz.sig \ + pristontale-eu-linux-installer-v1-1-1.tar.gz +sha256sum -c pristontale-eu-linux-installer-v1-1-1.tar.gz.sha256 +tar -xzf pristontale-eu-linux-installer-v1-1-1.tar.gz +cd pristontale-eu-linux-installer-v1-1-1 ./install.sh ``` @@ -34,10 +34,15 @@ Existing installations at the previous default location are preserved during upgrades. The installer adds **PristonTale EU** to the application menu and installs the `pristontale-eu` command in `~/.local/bin`. -Steam Proton 7.0 is discovered in both the default Steam library and secondary -libraries registered with the Steam client. If Proton uses an unregistered -manual layout, open **Settings → Optional Overrides** and select the exact -`Proton 7.0/proton` script. +GE-Proton through the managed UMU helper is the default runtime for the current +game, with modern WoW64 and a separate compatibility prefix. Existing settings +switch to GE-Proton once on startup; users can choose another runtime afterwards. +Renderer preferences and saved Proton paths are retained. PTR continues to use +Proton 7.0. Proton 7.0 is discovered in both +the default Steam library and secondary libraries registered with Steam. For an +unregistered manual layout, select its exact `proton` script under +**Settings → Optional Overrides**. Use the renderer setting to choose DXVK or +WineD3D; environment assignments do not belong in the Proton script path. ## Use diff --git a/pyproject.toml b/pyproject.toml index 26589bd..89d8383 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "PTEU-Linux-Launcher" -version = "1.0.8" +version = "1.1.1" description = "PristonTale EU Linux installer, clean launcher, and diagnostic harness" requires-python = ">=3.11" dependencies = [] diff --git a/src/ptlinux/__init__.py b/src/ptlinux/__init__.py index c2f1fcd..a9dbb3e 100644 --- a/src/ptlinux/__init__.py +++ b/src/ptlinux/__init__.py @@ -4,4 +4,4 @@ from .paths import AppPaths __all__ = ["AppPaths", "__version__"] -__version__ = "1.1.0" +__version__ = "1.1.1" diff --git a/src/ptlinux/cli.py b/src/ptlinux/cli.py index d9a7c1a..86d4563 100644 --- a/src/ptlinux/cli.py +++ b/src/ptlinux/cli.py @@ -861,11 +861,9 @@ def _source_game( def _load_or_default_settings(paths: AppPaths, *, persist: bool) -> Settings: - if paths.settings_file.is_file(): - return load_settings(paths) if persist: return ensure_settings(paths) - return Settings() + return load_settings(paths) def _runner(paths: AppPaths, operation: str, dry_run: bool) -> CommandRunner: diff --git a/src/ptlinux/diagnostics/native_logs.py b/src/ptlinux/diagnostics/native_logs.py index 8584979..b01f7e8 100644 --- a/src/ptlinux/diagnostics/native_logs.py +++ b/src/ptlinux/diagnostics/native_logs.py @@ -443,7 +443,7 @@ def parse_native_log_lines(lines: Iterable[str]) -> NativeLogAnalysis: ): analysis.out_of_memory_effect_paths.append(value) - if "Stage without new stage" in raw: + if "stage without new stage" in raw.casefold(): analysis.stage_without_new_stage = True analysis.events.append( LogEvent("stage_without_new_stage", line_number, raw, timestamp) diff --git a/src/ptlinux/settings.py b/src/ptlinux/settings.py index 147a953..9d37f51 100644 --- a/src/ptlinux/settings.py +++ b/src/ptlinux/settings.py @@ -18,7 +18,9 @@ from .update_resolver import SUPPORTED_CHANNELS SETTINGS_SCHEMA = 1 +DEFAULT_GAME_RUNTIME = "ge-proton" _TITLE_FRAME_DEFAULT_MIGRATION_KEY = "title_frame_default_migrated" +_GE_PROTON_DEFAULT_MIGRATION_KEY = "ge_proton_default_migrated" UI_SCALE_CHOICES = frozenset({"auto", "100", "125", "150", "175", "200"}) _RETIRED_SETTINGS = frozenset( { @@ -43,7 +45,7 @@ class Settings: game_crash_dump_upload_enabled: bool = False borderless: bool = False suppress_unresponsive_warnings: bool = True - runtime: str = "auto" + runtime: str = DEFAULT_GAME_RUNTIME proton_sync: str = "auto" proton_path: str | None = None renderer: str = "auto" @@ -188,7 +190,7 @@ def _settings_from_object(value: dict[str, object]) -> Settings: "suppress_unresponsive_warnings", True, ), - runtime=_string(value, "runtime", "auto"), + runtime=_string(value, "runtime", DEFAULT_GAME_RUNTIME), proton_sync=_string(value, "proton_sync", "auto"), proton_path=proton_path, renderer=renderer, @@ -201,6 +203,12 @@ def _settings_from_object(value: dict[str, object]) -> Settings: update_channel=_string(value, "update_channel", "stable"), ) _validate(settings) + # Move existing installations to the modern WoW64 profile once. Validate the + # saved runtime first so migration cannot hide malformed settings. New saves + # carry the marker, allowing users to choose another runtime afterwards. + # Keep the optional Proton path for PTR and future explicit legacy choices. + if not _boolean(value, _GE_PROTON_DEFAULT_MIGRATION_KEY, False): + return replace(settings, runtime=DEFAULT_GAME_RUNTIME) return settings @@ -237,6 +245,7 @@ def _settings_need_migration(value: dict[str, object]) -> bool: value.get("schema") != SETTINGS_SCHEMA or not _SETTINGS_FIELD_NAMES.issubset(value) or value.get(_TITLE_FRAME_DEFAULT_MIGRATION_KEY) is not True + or value.get(_GE_PROTON_DEFAULT_MIGRATION_KEY) is not True or bool(_RETIRED_SETTINGS.intersection(value)) or _legacy_renderer_assignment(value.get("proton_path")) is not None ) @@ -279,6 +288,7 @@ def _write_settings( payload.update(asdict(settings)) payload["schema"] = SETTINGS_SCHEMA payload[_TITLE_FRAME_DEFAULT_MIGRATION_KEY] = True + payload[_GE_PROTON_DEFAULT_MIGRATION_KEY] = True temporary = paths.settings_file.with_name( f".{paths.settings_file.name}.{os.getpid()}.{threading.get_ident()}." f"{secrets.token_hex(8)}.tmp" diff --git a/src/ptlinux/ui/dialogs/settings_dialog.py b/src/ptlinux/ui/dialogs/settings_dialog.py index 092ba4b..4616137 100644 --- a/src/ptlinux/ui/dialogs/settings_dialog.py +++ b/src/ptlinux/ui/dialogs/settings_dialog.py @@ -26,8 +26,8 @@ from ..viewmodels.downloader import ( RUNTIME_LABELS: dict[str, str] = { - "Automatic (recommended)": "auto", - "GE-Proton — Modern WoW64 via UMU": "ge-proton", + "GE-Proton — Modern WoW64 (recommended)": "ge-proton", + "Automatic": "auto", "Proton 7 — Steam Runtime container": "proton7-container", "Proton 7 — Direct": "proton7", "UMU Launcher": "umu", @@ -431,7 +431,7 @@ def open_settings_dialog( rendering_card.columnconfigure(1, weight=1) rendering_hint = ttk.Label( rendering_card, - text="Automatic uses GE-Proton with modern WoW64 for Babel when UMU is available.", + text="GE-Proton with modern WoW64 is recommended for Babel. PTR Babel uses Proton 7.", style="SettingsHint.TLabel", wraplength=360, ) diff --git a/updates/stable.json b/updates/stable.json index 6599d56..3c34e71 100644 --- a/updates/stable.json +++ b/updates/stable.json @@ -2,16 +2,16 @@ "application": "PristonTale-EU", "archive": { "layout": "flat", - "name": "PristonTale-EU-1.1.0.tar.gz", - "sha256": "b0bb10bdbe0d0e01ce04c8cdb2307c45f0cedb7e2c081794b6efe68d6aa4ac5c", - "size": 1550967, - "url": "https://git.m4ko.net/m4ko/pristontale-eu-linux/releases/download/v1.1.0/PristonTale-EU-1.1.0.tar.gz?sha256=b0bb10bdbe0d0e01ce04c8cdb2307c45f0cedb7e2c081794b6efe68d6aa4ac5c" + "name": "PristonTale-EU-1.1.1.tar.gz", + "sha256": "f3825038f83c1348a6eec790e94f5f244fe5ce246d39e2d32f65bb58395542e0", + "size": 1551152, + "url": "https://git.m4ko.net/m4ko/pristontale-eu-linux/releases/download/v1.1.1/PristonTale-EU-1.1.1.tar.gz?sha256=f3825038f83c1348a6eec790e94f5f244fe5ce246d39e2d32f65bb58395542e0" }, - "archive_sha256": "b0bb10bdbe0d0e01ce04c8cdb2307c45f0cedb7e2c081794b6efe68d6aa4ac5c", - "archive_size": 1550967, - "archive_url": "https://git.m4ko.net/m4ko/pristontale-eu-linux/releases/download/v1.1.0/PristonTale-EU-1.1.0.tar.gz?sha256=b0bb10bdbe0d0e01ce04c8cdb2307c45f0cedb7e2c081794b6efe68d6aa4ac5c", + "archive_sha256": "f3825038f83c1348a6eec790e94f5f244fe5ce246d39e2d32f65bb58395542e0", + "archive_size": 1551152, + "archive_url": "https://git.m4ko.net/m4ko/pristontale-eu-linux/releases/download/v1.1.1/PristonTale-EU-1.1.1.tar.gz?sha256=f3825038f83c1348a6eec790e94f5f244fe5ce246d39e2d32f65bb58395542e0", "channel": "stable", - "commit": "be7891f06617674864b035645137441321db03b4", + "commit": "d75c345d36b5916ce58fdf5fd9dbdf4e6d006471", "compatibility": { "config_schema": 1, "manifest_schema": 1, @@ -36,7 +36,7 @@ }, { "path": "ptlinux/__init__.py", - "sha256": "d533461854917e3343b9f600b5949421eadedb9a0a550a8adf0444b81023d333", + "sha256": "1ec358b790abcebfcba6a44510323648e9a11a6b4e1f2b6b666e288c10fe4c96", "size": 151 }, { @@ -91,8 +91,8 @@ }, { "path": "ptlinux/cli.py", - "sha256": "ae8f3740fa997d7e00d26bc5fec68f582e70a051cfb00cd88c8a2eaeb547b4b0", - "size": 23871 + "sha256": "e142e0f33a7f1f8f88b8ad431d1b28b24dab3f74d367ed1912e8106ba6aab229", + "size": 23816 }, { "path": "ptlinux/command.py", @@ -131,8 +131,8 @@ }, { "path": "ptlinux/diagnostics/native_logs.py", - "sha256": "3c07a45e89f69b2607288d7fd98f20e0679ee35599de03a3d4e3838ef93e91ba", - "size": 18769 + "sha256": "1a7044630052311e7f74ddd716b82a60383d4404493970db35f6741019510ecb", + "size": 18780 }, { "path": "ptlinux/doctor.py", @@ -446,8 +446,8 @@ }, { "path": "ptlinux/settings.py", - "sha256": "8d62b262bb43eff664b9f6a58bf68a88fec0a8e05b6b9e97cbb47509079c2115", - "size": 12059 + "sha256": "7fd8ecdcbc76feb9bef1f9c840e0e5f73f159c1d370d04e2f3455917a7bc3cce", + "size": 12727 }, { "path": "ptlinux/system_identity.py", @@ -656,8 +656,8 @@ }, { "path": "ptlinux/ui/dialogs/settings_dialog.py", - "sha256": "20a8e461799fa2104e5a09a6e4ec2e8c027caa0688726c57c9ed45e872c1971f", - "size": 25299 + "sha256": "36ffa11821ec1ee3c95774071736082828c58c1f37874f00e66441d2ba0f76fa", + "size": 25294 }, { "path": "ptlinux/ui/viewmodels/__init__.py", @@ -706,21 +706,21 @@ }, { "path": "release.json", - "sha256": "5dfcea2e0eb6ee4d79dba982d79e1a4d5efe1ce0579537d2a0cfab990153636a", + "sha256": "1480e6705168b79b038871832ee1558f1e79e8bdac2fd285c558950cc1fcbae9", "size": 218 } ], "minimum_updater_version": "0.9.9", - "notes_url": "https://git.m4ko.net/m4ko/pristontale-eu-linux/releases/tag/v1.1.0", - "published_at": "2026-09-19T10:49:03Z", + "notes_url": "https://git.m4ko.net/m4ko/pristontale-eu-linux/releases/tag/v1.1.1", + "published_at": "2026-10-20T21:42:30Z", "release": { - "notes_markdown": "# PristonTale EU Launcher 1.1.0\n\n- Improved GE-Proton/UMU compatibility, launch arguments, and renderer selection.\n- Isolated runtime prefixes and strengthened compatibility checks for game updates.\n- Fixed missing-Tk startup recovery and SteamOS dependency warnings.\n- Improved CDN retries, mirror failover, and interrupted download recovery.\n- Fixed Gamescope shutdown handling and optimized window resizing detection.\n- Expanded launch diagnostics and regression coverage.\n\n---\n\nVersion: `1.1.0` \nChannel: `stable` \nTag: `v1.1.0` \nSource commit: `be7891f06617674864b035645137441321db03b4`\n", - "release_notes_url": "https://git.m4ko.net/m4ko/pristontale-eu-linux/releases/tag/v1.1.0", - "summary": "Improved GE-Proton/UMU compatibility, launch arguments, and renderer selection.", - "title": "PristonTale EU Launcher 1.1.0" + "notes_markdown": "# PristonTale EU Launcher 1.1.1\n\n- Made GE-Proton with modern WoW64 the default runtime for Babel.\n- Automatically migrate existing runtime settings once, while preserving later manual choices and PTR's Proton 7 compatibility.\n- Persist settings migrations during command-line launches and updates.\n- Improved detection of collision warnings in game crash diagnostics.\n\nThe first launch may download GE-Proton and prepare its separate compatibility prefix.\n\n---\n\nVersion: `1.1.1` \nChannel: `stable` \nTag: `v1.1.1` \nSource commit: `d75c345d36b5916ce58fdf5fd9dbdf4e6d006471`\n", + "release_notes_url": "https://git.m4ko.net/m4ko/pristontale-eu-linux/releases/tag/v1.1.1", + "summary": "Made GE-Proton with modern WoW64 the default runtime for Babel.", + "title": "PristonTale EU Launcher 1.1.1" }, "schema": 1, "status": "active", - "tag": "v1.1.0", - "version": "1.1.0" + "tag": "v1.1.1", + "version": "1.1.1" } diff --git a/updates/stable.json.sig b/updates/stable.json.sig index 31a5db57a61fcae4a19b1edc41443662a4b29d19..b7eef8e7f4174270055bd467bd6f21286fbecd00 100644 GIT binary patch literal 384 zcmV-`0e}8V{jKmO3sux4E_QVwL>Pis~T^S<)Bw0uJ=!VD;B^a+=(3NmUWFu$RTAV4kh#)j0!sF6w zxfygVN0sK{PIcQ@anC7>{B~O(X!@3^oZpk!B5z9>ep0yv;1>1xs$xM@^I|0tjlLHl z|1fDF9|vh-0UT+r@6|EnJ-nbmA)OGU_;)30ARcs{A-e0Pe}q<<_1vA=b@(N3#*J!n zl@)gYrZX|3zt+J+5$1T9BRYLQEs9Oq)l}E{0mE5#0<9ToFRAyV-G^S4@CTY>n%eC^ zBl8j1Ybsag&}7V_=9q+r5j#ZkmX<0OWm_Zz+9nv~X* zF~5?5MN-fglKgcVB%Gg91-%ER1|!RU^4PFT$ap|vJS#55)7VeH99r-fQb@c;AeHqn zD!(er0K#pBdS*@cki-jImyFj-$0`!>wRCx6m);PuY{aI(9^-w9QL6*0Dgv6W;U0{( zfiON%APgL)TzksK zqcbE;SU