From 72fb0c63dcae7175f0cb18a8a8bb36da12bdc578 Mon Sep 17 00:00:00 2001 From: Daniel Joyce Date: Sat, 23 May 2026 17:55:01 +0100 Subject: [PATCH 1/5] feat(): Offline launching for Epic games. Had to make some adjustments to XServerScreen due to the offline settings. --- app/src/main/java/app/gamenative/PrefManager.kt | 8 ++++++++ .../gamenative/ui/component/dialog/GeneralTab.kt | 15 ++++++++------- .../ui/screen/xserver/XServerScreen.kt | 13 ++++++------- .../java/app/gamenative/utils/ContainerUtils.kt | 7 +++++++ .../java/com/winlator/container/Container.java | 16 ++++++++++++++++ .../java/com/winlator/container/ContainerData.kt | 3 +++ app/src/main/res/values/strings.xml | 4 ++++ 7 files changed, 52 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/app/gamenative/PrefManager.kt b/app/src/main/java/app/gamenative/PrefManager.kt index 18ec8ef451..57f611dfca 100644 --- a/app/src/main/java/app/gamenative/PrefManager.kt +++ b/app/src/main/java/app/gamenative/PrefManager.kt @@ -496,6 +496,14 @@ object PrefManager { setPref(STEAM_OFFLINE_MODE, value) } + private val EPIC_OFFLINE_MODE = booleanPreferencesKey("epic_offline_mode") + var epicOfflineMode: Boolean + get() = getPref(EPIC_OFFLINE_MODE, false) + set(value) { + setPref(EPIC_OFFLINE_MODE, value) + } + + private val USE_LEGACY_DRM = booleanPreferencesKey("use_legacy_drm") var useLegacyDRM: Boolean get() = getPref(USE_LEGACY_DRM, false) diff --git a/app/src/main/java/app/gamenative/ui/component/dialog/GeneralTab.kt b/app/src/main/java/app/gamenative/ui/component/dialog/GeneralTab.kt index 0ede7ebef2..57c0ad824b 100644 --- a/app/src/main/java/app/gamenative/ui/component/dialog/GeneralTab.kt +++ b/app/src/main/java/app/gamenative/ui/component/dialog/GeneralTab.kt @@ -330,13 +330,7 @@ fun GeneralTabContent( state = config.forceDlc, onCheckedChange = { state.config.value = config.copy(forceDlc = it) }, ) -// SettingsSwitch( -// colors = settingsTileColorsAlt(), -// title = { Text(text = stringResource(R.string.local_saves_only)) }, -// subtitle = { Text(text = stringResource(R.string.local_saves_only_description)) }, -// state = config.localSavesOnly, -// onCheckedChange = { state.config.value = config.copy(localSavesOnly = it) }, -// ) + SettingsSwitch( colors = settingsTileColorsAlt(), title = { Text(text = stringResource(R.string.use_legacy_drm)) }, @@ -359,6 +353,13 @@ fun GeneralTabContent( state = config.steamOfflineMode, onCheckedChange = { state.config.value = config.copy(steamOfflineMode = it) }, ) + SettingsSwitch( + colors = settingsTileColorsAlt(), + title = { Text(text = stringResource(R.string.epic_offline_mode)) }, + subtitle = { Text(text = stringResource(R.string.epic_offline_mode_description)) }, + state = config.epicOfflineMode, + onCheckedChange = { state.config.value = config.copy(epicOfflineMode = it) }, + ) SettingsSwitch( colors = settingsTileColorsAlt(), title = { Text(text = stringResource(R.string.launch_steam_client_beta)) }, diff --git a/app/src/main/java/app/gamenative/ui/screen/xserver/XServerScreen.kt b/app/src/main/java/app/gamenative/ui/screen/xserver/XServerScreen.kt index ce9c0aace5..2bac372221 100644 --- a/app/src/main/java/app/gamenative/ui/screen/xserver/XServerScreen.kt +++ b/app/src/main/java/app/gamenative/ui/screen/xserver/XServerScreen.kt @@ -1977,7 +1977,7 @@ fun XServerScreen( xServerView!!.getxServer(), containerVariantChanged, onGameLaunchError, - navigateBack, + isOffline ) if (!PluviaApp.isActivityInForeground && !neverSuspend) { PluviaApp.xEnvironment?.onPause() @@ -2992,16 +2992,13 @@ private fun setupXEnvironment( bootToContainer: Boolean, testGraphics: Boolean, xServerState: MutableState, - // xServerViewModel: XServerViewModel, envVars: EnvVars, - // generateWinePrefix: Boolean, container: Container?, appLaunchInfo: LaunchInfo?, - // shortcut: Shortcut?, xServer: XServer, containerVariantChanged: Boolean, onGameLaunchError: ((String) -> Unit)? = null, - navigateBack: () -> Unit, + offline: Boolean = false ): XEnvironment { ProcessHelper.hardKillStaleWineProcesses() @@ -3121,7 +3118,7 @@ private fun setupXEnvironment( } } gameExecutable = "wine explorer /desktop=shell," + xServer.screenInfo + " " + - getWineStartCommand(context, appId, container, bootToContainer, testGraphics, appLaunchInfo, envVars, guestProgramLauncherComponent, gameSource) + + getWineStartCommand(context, appId, container, bootToContainer, testGraphics, appLaunchInfo, envVars, guestProgramLauncherComponent, gameSource, offline) + (if (container.execArgs.isNotEmpty()) " " + container.execArgs else "") preInstallCommands = PreInstallSteps.getPreInstallCommands( container, @@ -3414,6 +3411,7 @@ private fun getWineStartCommand( envVars: EnvVars, guestProgramLauncherComponent: GuestProgramLauncherComponent, gameSource: GameSource, + offline: Boolean ): String { val tempDir = File(container.getRootDir(), ".wine/drive_c/windows/temp") FileUtils.clear(tempDir) @@ -3512,7 +3510,8 @@ private fun getWineStartCommand( // Get Epic launch parameters Timber.tag("XServerScreen").d("Building Epic launch parameters for ${game.appName}...") val runArguments: List = runBlocking { - val result = EpicService.buildLaunchParameters(context, container, game, false) + val offlineLaunch = offline || container.isEpicOfflineMode; + val result = EpicService.buildLaunchParameters(context, container, game, offlineLaunch) if (result.isFailure) { Timber.tag("XServerScreen").e(result.exceptionOrNull(), "Failed to build Epic launch parameters") } diff --git a/app/src/main/java/app/gamenative/utils/ContainerUtils.kt b/app/src/main/java/app/gamenative/utils/ContainerUtils.kt index 3e874958d2..de02b5efab 100644 --- a/app/src/main/java/app/gamenative/utils/ContainerUtils.kt +++ b/app/src/main/java/app/gamenative/utils/ContainerUtils.kt @@ -118,6 +118,7 @@ object ContainerUtils { forceDlc = PrefManager.forceDlc, localSavesOnly = PrefManager.localSavesOnly, steamOfflineMode = PrefManager.steamOfflineMode, + epicOfflineMode = PrefManager.epicOfflineMode, useLegacyDRM = PrefManager.useLegacyDRM, unpackFiles = PrefManager.unpackFiles, suspendPolicy = PrefManager.suspendPolicy, @@ -202,6 +203,7 @@ object ContainerUtils { PrefManager.forceDlc = containerData.forceDlc PrefManager.localSavesOnly = containerData.localSavesOnly PrefManager.steamOfflineMode = containerData.steamOfflineMode + PrefManager.epicOfflineMode = containerData.epicOfflineMode PrefManager.useLegacyDRM = containerData.useLegacyDRM PrefManager.unpackFiles = containerData.unpackFiles PrefManager.suspendPolicy = containerData.suspendPolicy @@ -300,6 +302,7 @@ object ContainerUtils { forceDlc = container.isForceDlc, localSavesOnly = container.isLocalSavesOnly, steamOfflineMode = container.isSteamOfflineMode(), + epicOfflineMode = container.isEpicOfflineMode(), useLegacyDRM = container.isUseLegacyDRM(), unpackFiles = container.isUnpackFiles(), suspendPolicy = container.suspendPolicy, @@ -388,6 +391,7 @@ object ContainerUtils { ?: updatedData "useLegacyDRM" -> value?.let { updatedData.copy(useLegacyDRM = it as? Boolean ?: updatedData.useLegacyDRM) } ?: updatedData "steamOfflineMode" -> value?.let { updatedData.copy(steamOfflineMode = it as? Boolean ?: updatedData.steamOfflineMode) } ?: updatedData + "epicOfflineMode" -> value?.let { updatedData.copy(epicOfflineMode = it as? Boolean ?: updatedData.epicOfflineMode) } ?: updatedData "unpackFiles" -> value?.let { updatedData.copy(unpackFiles = it as? Boolean ?: updatedData.unpackFiles) } ?: updatedData "suspendPolicy" -> value?.let { updatedData.copy(suspendPolicy = it as? String ?: updatedData.suspendPolicy) } ?: updatedData "envVars" -> value?.let { updatedData.copy(envVars = it as? String ?: updatedData.envVars) } ?: updatedData @@ -416,6 +420,7 @@ object ContainerUtils { } val previousForceDlc: Boolean = container.isForceDlc val previousSteamOfflineMode: Boolean = container.isSteamOfflineMode() + val previousEpicOfflineMode: Boolean = container.isEpicOfflineMode() val previousUnpackFiles: Boolean = container.isUnpackFiles val userRegFile = File(container.rootDir, ".wine/user.reg") WineRegistryEditor(userRegFile).use { registryEditor -> @@ -482,6 +487,7 @@ object ContainerUtils { container.setForceDlc(containerData.forceDlc) container.setLocalSavesOnly(containerData.localSavesOnly) container.setSteamOfflineMode(containerData.steamOfflineMode) + container.setEpicOfflineMode(containerData.epicOfflineMode) container.setUseLegacyDRM(containerData.useLegacyDRM) container.setUnpackFiles(containerData.unpackFiles) container.setSuspendPolicy(containerData.suspendPolicy) @@ -858,6 +864,7 @@ object ContainerUtils { disableMouseInput = PrefManager.disableMouseInput, forceDlc = PrefManager.forceDlc, steamOfflineMode = PrefManager.steamOfflineMode, + epicOfflineMode = PrefManager.epicOfflineMode, useLegacyDRM = PrefManager.useLegacyDRM, unpackFiles = PrefManager.unpackFiles, suspendPolicy = PrefManager.suspendPolicy, diff --git a/app/src/main/java/com/winlator/container/Container.java b/app/src/main/java/com/winlator/container/Container.java index 3df4893d60..abdd5fef3e 100644 --- a/app/src/main/java/com/winlator/container/Container.java +++ b/app/src/main/java/com/winlator/container/Container.java @@ -148,6 +148,8 @@ public enum XrControllerMapping { private boolean steamOfflineMode = false; + private boolean epicOfflineMode = false; + private boolean useLegacyDRM = false; private boolean unpackFiles = false; @@ -713,6 +715,9 @@ public void saveData() { // Steam offline mode setting data.put("steamOfflineMode", steamOfflineMode); + // Steam offline mode setting + data.put("epicOfflineMode", epicOfflineMode); + // Use Legacy DRM setting data.put("useLegacyDRM", useLegacyDRM); @@ -912,6 +917,9 @@ public void loadData(JSONObject data) throws JSONException { case "steamOfflineMode": this.steamOfflineMode = data.getBoolean(key); break; + case "epicOfflineMode": + this.epicOfflineMode = data.getBoolean(key); + break; case "useLegacyDRM": this.useLegacyDRM = data.getBoolean(key); break; @@ -1000,10 +1008,18 @@ public boolean isSteamOfflineMode() { return steamOfflineMode; } + public boolean isEpicOfflineMode() { + return epicOfflineMode; + } + public void setSteamOfflineMode(boolean steamOfflineMode) { this.steamOfflineMode = steamOfflineMode; } + public void setEpicOfflineMode(boolean epicOfflineMode) { + this.epicOfflineMode = epicOfflineMode; + } + public boolean isUseLegacyDRM() { return useLegacyDRM; } diff --git a/app/src/main/java/com/winlator/container/ContainerData.kt b/app/src/main/java/com/winlator/container/ContainerData.kt index 7fb3a389fe..6e9b110cd7 100644 --- a/app/src/main/java/com/winlator/container/ContainerData.kt +++ b/app/src/main/java/com/winlator/container/ContainerData.kt @@ -88,6 +88,7 @@ data class ContainerData( val forceDlc: Boolean = false, val localSavesOnly: Boolean = false, val steamOfflineMode: Boolean = false, + val epicOfflineMode: Boolean = false, val useLegacyDRM: Boolean = false, val unpackFiles: Boolean = false, val suspendPolicy: String = Container.SUSPEND_POLICY_MANUAL, @@ -155,6 +156,7 @@ data class ContainerData( "forceDlc" to state.forceDlc, "localSavesOnly" to state.localSavesOnly, "steamOfflineMode" to state.steamOfflineMode, + "epicOfflineMode" to state.epicOfflineMode, "useLegacyDRM" to state.useLegacyDRM, "unpackFiles" to state.unpackFiles, "suspendPolicy" to state.suspendPolicy, @@ -219,6 +221,7 @@ data class ContainerData( forceDlc = (savedMap["forceDlc"] as? Boolean) ?: false, localSavesOnly = (savedMap["localSavesOnly"] as? Boolean) ?: false, steamOfflineMode = (savedMap["steamOfflineMode"] as? Boolean) ?: false, + epicOfflineMode = (savedMap["epicOfflineMode"] as? Boolean) ?: false, useLegacyDRM = (savedMap["useLegacyDRM"] as? Boolean) ?: false, unpackFiles = (savedMap["unpackFiles"] as? Boolean) ?: false, suspendPolicy = (savedMap["suspendPolicy"] as? String) ?: Container.SUSPEND_POLICY_MANUAL, diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a7985c8fdd..b2e9b32f11 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -688,6 +688,10 @@ Updates Steam to the latest version. Significantly reduces performance. Steam Type + + Epic Offline Mode + Launch Epic games in offline mode + Graphics Driver Graphics Driver Version From beba9d13909328d5edc5ba3aedbd675244758b7f Mon Sep 17 00:00:00 2001 From: Daniel Joyce Date: Sat, 23 May 2026 18:53:45 +0100 Subject: [PATCH 2/5] feat(): Adjust bits and bobs --- app/src/main/java/app/gamenative/utils/ContainerUtils.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/app/gamenative/utils/ContainerUtils.kt b/app/src/main/java/app/gamenative/utils/ContainerUtils.kt index de02b5efab..5c8bd7c808 100644 --- a/app/src/main/java/app/gamenative/utils/ContainerUtils.kt +++ b/app/src/main/java/app/gamenative/utils/ContainerUtils.kt @@ -420,7 +420,7 @@ object ContainerUtils { } val previousForceDlc: Boolean = container.isForceDlc val previousSteamOfflineMode: Boolean = container.isSteamOfflineMode() - val previousEpicOfflineMode: Boolean = container.isEpicOfflineMode() + val previousUnpackFiles: Boolean = container.isUnpackFiles val userRegFile = File(container.rootDir, ".wine/user.reg") WineRegistryEditor(userRegFile).use { registryEditor -> From 4cdabe9bf172afff9fe5ad8ce25ba75564741d1c Mon Sep 17 00:00:00 2001 From: Daniel Joyce Date: Sat, 23 May 2026 18:58:54 +0100 Subject: [PATCH 3/5] feat(): Fixed offline launch --- .../java/app/gamenative/service/epic/EpicGameLauncher.kt | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/app/src/main/java/app/gamenative/service/epic/EpicGameLauncher.kt b/app/src/main/java/app/gamenative/service/epic/EpicGameLauncher.kt index 681a99a24c..abe4589231 100644 --- a/app/src/main/java/app/gamenative/service/epic/EpicGameLauncher.kt +++ b/app/src/main/java/app/gamenative/service/epic/EpicGameLauncher.kt @@ -36,14 +36,11 @@ object EpicGameLauncher { return try { val params = mutableListOf() + Timber.tag("EPIC").i("is offline: $offline") // Do offline play if offline. if (offline) { - if (game.canRunOffline) { Timber.tag("EPIC").i("Launching ${game.appName} in offline mode (no authentication)") return Result.success(params) - } else { - Timber.tag("EPIC").w("${game.appName} cannot run offline, will attempt online launch") - } } Timber.tag("EPIC").d("Launching ${game.appName} online, getting game launch token...") From 8cf7b4adbc244551c5eb3e5b963ba475661c55b9 Mon Sep 17 00:00:00 2001 From: Daniel Joyce Date: Sat, 23 May 2026 19:02:10 +0100 Subject: [PATCH 4/5] feat(): added in the translations --- app/src/main/res/values-da/strings.xml | 2 ++ app/src/main/res/values-de/strings.xml | 2 ++ app/src/main/res/values-es/strings.xml | 2 ++ app/src/main/res/values-fr/strings.xml | 2 ++ app/src/main/res/values-it/strings.xml | 2 ++ app/src/main/res/values-ko/strings.xml | 2 ++ app/src/main/res/values-pl/strings.xml | 2 ++ app/src/main/res/values-pt-rBR/strings.xml | 2 ++ app/src/main/res/values-ro/strings.xml | 2 ++ app/src/main/res/values-ru/strings.xml | 2 ++ app/src/main/res/values-uk/strings.xml | 2 ++ app/src/main/res/values-zh-rCN/strings.xml | 2 ++ app/src/main/res/values-zh-rTW/strings.xml | 2 ++ 13 files changed, 26 insertions(+) diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 103f497551..2f21920eb4 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -494,6 +494,8 @@ Start Steam-klient (Beta) Steam Offline-tilstand Start Steam-spil i offline-tilstand + Epic Offline-tilstand + Start Epic-spil i offline-tilstand Præstation låst op Placering af præstationsnotifikation Øverst til venstre diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index ff21cb3c00..8cca5e4fa0 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -632,6 +632,8 @@ Steam-Client starten (Beta) Steam Offline-Modus Steam-Spiele im Offlinemodus starten + Epic Offline-Modus + Epic-Spiele im Offlinemodus starten Erfolg freigeschaltet Position der Erfolgsbenachrichtigung Oben links diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 72986022de..ecfec6d3a4 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -705,6 +705,8 @@ Reduce el rendimiento y ralentiza el inicio.\nPermite el juego en línea y soluciona problemas de DRM y de mando.\nNo todos los juegos funcionan. Modo sin conexión de Steam Inicia juegos de Steam en modo sin conexión. + Modo sin conexión de Epic + Inicia juegos de Epic en modo sin conexión. Logro desbloqueado Posición de notificación de logro Arriba izquierda diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 49e59f4c73..e0a8b5ff82 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -655,6 +655,8 @@ Lancer le client Steam (Bêta) Mode Hors Ligne Steam Lancer les jeux Steam en mode hors ligne + Mode Hors Ligne Epic + Lancer les jeux Epic en mode hors ligne Succès débloqué Position de la notification de succès En haut à gauche diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 092aa37d53..e0adff0a47 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -659,6 +659,8 @@ Avvia Client Steam (Beta) Modalità Offline Steam Avvia i giochi Steam in modalità offline + Modalità Offline Epic + Avvia i giochi Epic in modalità offline Obiettivo sbloccato Posizione notifica obiettivo In alto a sinistra diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index d6c03e3840..1ff951dd28 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -669,6 +669,8 @@ Steam 클라이언트 실행(베타) Steam 오프라인 모드 Steam 게임을 오프라인 모드로 실행 + Epic 오프라인 모드 + Epic 게임을 오프라인 모드로 실행 업적 달성 업적 알림 위치 좌측 상단 diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 24a46e91a0..2ca9d75b3b 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -668,6 +668,8 @@ Uruchom Klienta Steam (Beta) Tryb Offline Steam Uruchamiaj gry Steam w trybie offline + Tryb Offline Epic + Uruchamiaj gry Epic w trybie offline Osiągnięcie odblokowane Pozycja powiadomienia o osiągnięciu Lewy górny diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index d139eeed5f..273b7cd397 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -494,6 +494,8 @@ Iniciar o cliente Steam (Beta) Modo Offline do Steam Iniciar jogos Steam no modo offline + Modo Offline da Epic + Iniciar jogos Epic no modo offline Conquista desbloqueada Posição da notificação de conquista Superior esquerdo diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 6e3af31a74..88c42487e6 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -660,6 +660,8 @@ Pornește Steam Client (Beta) Mod Offline Steam Pornește jocurile Steam în mod offline + Mod Offline Epic + Pornește jocurile Epic în mod offline Realizare deblocată Poziția notificării realizării Stânga sus diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index e89b10cfe3..cbee5ef362 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -1119,6 +1119,8 @@ https://gamenative.app Вы должны войти в Steam, чтобы использовать эту функцию Автономный режим Steam Запускать игры Steam в автономном режиме + Автономный режим Epic + Запускать игры Epic в автономном режиме Это восстановит ваш контейнер к конфигурации по умолчанию. Сбросить контейнер Войти в Steam diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index e6c6192b8d..343cb51937 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -654,6 +654,8 @@ Запустити клієнт Steam (Бета) Режим Офлайн Steam Запускати ігри Steam в офлайн режимі + Режим Офлайн Epic + Запускати ігри Epic в офлайн режимі Досягнення розблоковано Позиція сповіщення про досягнення Лівий верхній diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index dd3acc357d..735f1222d0 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -650,6 +650,8 @@ 启动 Steam 客户端(Beta) Steam 离线模式 以离线模式启动 Steam 游戏 + Epic 离线模式 + 以离线模式启动 Epic 游戏 成就已解锁 成就通知位置 左上 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 7ac8128c9b..19b600b4b8 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -652,6 +652,8 @@ 啟動 Steam 用戶端 (Beta) Steam 離線模式 以離線模式啟動 Steam 遊戲 + Epic 離線模式 + 以離線模式啟動 Epic 遊戲 成就已解鎖 成就通知位置 左上 From 1062f4b98c0ec431bd9e872cde24a82491cb95a7 Mon Sep 17 00:00:00 2001 From: Daniel Joyce Date: Sat, 23 May 2026 19:03:11 +0100 Subject: [PATCH 5/5] feat(): removed old log --- .../main/java/app/gamenative/service/epic/EpicGameLauncher.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/src/main/java/app/gamenative/service/epic/EpicGameLauncher.kt b/app/src/main/java/app/gamenative/service/epic/EpicGameLauncher.kt index abe4589231..b947ff42c7 100644 --- a/app/src/main/java/app/gamenative/service/epic/EpicGameLauncher.kt +++ b/app/src/main/java/app/gamenative/service/epic/EpicGameLauncher.kt @@ -36,8 +36,7 @@ object EpicGameLauncher { return try { val params = mutableListOf() - Timber.tag("EPIC").i("is offline: $offline") - // Do offline play if offline. + // Offline launch if offline (either via the container settings or the device) if (offline) { Timber.tag("EPIC").i("Launching ${game.appName} in offline mode (no authentication)") return Result.success(params)