From 396d9214e9dcee6ff072552875a8f7cf2b766494 Mon Sep 17 00:00:00 2001
From: Kurt Himebauch <136133082+xXJSONDeruloXx@users.noreply.github.com>
Date: Sat, 7 Nov 2026 20:29:05 -0500
Subject: [PATCH] fix(storage): Clean up keeps Proton EasyAntiCheat and
BattlEye runtimes
---
.../main/java/com/droiddeck/launcher/storage/SteamStorage.kt | 5 ++++-
.../main/java/com/droiddeck/launcher/storage/StorageScan.kt | 3 ++-
app/src/main/java/com/droiddeck/launcher/ui/StoragePage.kt | 1 +
app/src/main/res/values/strings.xml | 1 +
.../java/com/droiddeck/launcher/storage/SteamStorageTest.kt | 2 ++
5 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/com/droiddeck/launcher/storage/SteamStorage.kt b/app/src/main/java/com/droiddeck/launcher/storage/SteamStorage.kt
index de3648e83..2111bfdee 100644
--- a/app/src/main/java/com/droiddeck/launcher/storage/SteamStorage.kt
+++ b/app/src/main/java/com/droiddeck/launcher/storage/SteamStorage.kt
@@ -11,6 +11,8 @@ object SteamStorage {
const val PROTON_11_ARM = 4628740
const val REDISTRIBUTABLES = 228980
const val FEX = 3127680
+ const val EAC_RUNTIME = 1826330
+ const val BATTLEYE_RUNTIME = 1161040
const val ARM_TOOL = "droiddeck-proton-arm64"
const val ARM_11_TOOL = "droiddeck-proton-11-arm64"
@@ -18,7 +20,7 @@ object SteamStorage {
private val VALVE_TOOLS = setOf(
858280, 961940, 1054830, 1113280, 1245040, 1420170, 1493710, 1580130, 1887720, 2180100, 2348590,
2805730, 3029110, 3658110, 4183110, 4628710, 4690330,
- SCOUT, SOLDIER, SNIPER, ARM_RUNTIME, PROTON_ARM, PROTON_11_ARM, REDISTRIBUTABLES, FEX,
+ SCOUT, SOLDIER, SNIPER, ARM_RUNTIME, PROTON_ARM, PROTON_11_ARM, REDISTRIBUTABLES, FEX, EAC_RUNTIME, BATTLEYE_RUNTIME,
)
private val APP_ID = Regex("^\\s*\"appid\"\\s*\"(\\d+)\"", RegexOption.MULTILINE)
@@ -93,6 +95,7 @@ object SteamStorage {
val dir = m.installDir.orEmpty()
return when {
m.appId == SCOUT || m.appId == SOLDIER || dir == "SteamLinuxRuntime" || dir == "SteamLinuxRuntime_soldier" -> Kind.OLD_RUNTIME
+ m.appId == EAC_RUNTIME || m.appId == BATTLEYE_RUNTIME -> Kind.REQUIRED
dir.startsWith("Proton") && "ARM64" in dir -> Kind.ARM_PROTON
m.appId == PROTON_ARM || m.appId == PROTON_11_ARM -> Kind.ARM_PROTON
dir.startsWith("Proton ") -> Kind.X86_PROTON
diff --git a/app/src/main/java/com/droiddeck/launcher/storage/StorageScan.kt b/app/src/main/java/com/droiddeck/launcher/storage/StorageScan.kt
index 9c5fff91a..3a7c52db3 100644
--- a/app/src/main/java/com/droiddeck/launcher/storage/StorageScan.kt
+++ b/app/src/main/java/com/droiddeck/launcher/storage/StorageScan.kt
@@ -26,7 +26,7 @@ class GameUsage(
}
enum class ToolState { IN_USE, REQUIRED, UNUSED }
-enum class ToolReason { DEFAULT_PROTON, PROTON, FEX_RUNTIME, ARM_RUNTIME, REDISTRIBUTABLES, FEX, STEAM_TOOL, OLD_RUNTIME, X86_PROTON, CUSTOM, CUSTOM_UNKNOWN, X64_CLIENT }
+enum class ToolReason { DEFAULT_PROTON, PROTON, FEX_RUNTIME, ARM_RUNTIME, REDISTRIBUTABLES, FEX, ANTICHEAT_RUNTIME, STEAM_TOOL, OLD_RUNTIME, X86_PROTON, CUSTOM, CUSTOM_UNKNOWN, X64_CLIENT }
class ToolUsage(
val key: String, val name: String, val bytes: Long, val state: ToolState, val reason: ToolReason,
@@ -153,6 +153,7 @@ object StorageScan {
SteamStorage.ARM_RUNTIME -> ToolReason.ARM_RUNTIME
SteamStorage.REDISTRIBUTABLES -> ToolReason.REDISTRIBUTABLES
SteamStorage.FEX -> ToolReason.FEX
+ SteamStorage.EAC_RUNTIME, SteamStorage.BATTLEYE_RUNTIME -> ToolReason.ANTICHEAT_RUNTIME
else -> ToolReason.STEAM_TOOL
}
}
diff --git a/app/src/main/java/com/droiddeck/launcher/ui/StoragePage.kt b/app/src/main/java/com/droiddeck/launcher/ui/StoragePage.kt
index 04ff93efc..68bcb8d27 100644
--- a/app/src/main/java/com/droiddeck/launcher/ui/StoragePage.kt
+++ b/app/src/main/java/com/droiddeck/launcher/ui/StoragePage.kt
@@ -714,6 +714,7 @@ private fun toolDetail(t: ToolUsage): String = when (t.reason) {
ToolReason.ARM_RUNTIME -> stringResource(R.string.storage_tool_arm_runtime)
ToolReason.REDISTRIBUTABLES -> stringResource(R.string.storage_tool_redist)
ToolReason.FEX -> stringResource(R.string.storage_tool_fex)
+ ToolReason.ANTICHEAT_RUNTIME -> stringResource(R.string.storage_tool_anticheat)
ToolReason.STEAM_TOOL -> stringResource(R.string.storage_tool_steam)
ToolReason.OLD_RUNTIME -> stringResource(R.string.storage_tool_old_runtime)
ToolReason.X86_PROTON -> stringResource(R.string.storage_tool_x86_proton)
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 857185f8b..6d9f8bd8c 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -3222,6 +3222,7 @@
VC++ and DirectX installers games ask for
Runs Linux x86 games
Steam tool
+ Steam downloads this for games that ship anti-cheat, even when it is off. Removing it stalls their install at 0%
DroidDeck runs games without this runtime
x86 Proton, which DroidDeck cannot run
Default for every game
diff --git a/app/src/test/java/com/droiddeck/launcher/storage/SteamStorageTest.kt b/app/src/test/java/com/droiddeck/launcher/storage/SteamStorageTest.kt
index 0cfbf2e05..a3b6a8fa2 100644
--- a/app/src/test/java/com/droiddeck/launcher/storage/SteamStorageTest.kt
+++ b/app/src/test/java/com/droiddeck/launcher/storage/SteamStorageTest.kt
@@ -50,6 +50,8 @@ class SteamStorageTest {
assertEquals(SteamStorage.Kind.X86_PROTON, SteamStorage.kind(manifest(1493710, "Proton - Experimental")))
assertEquals(SteamStorage.Kind.X86_PROTON, SteamStorage.kind(manifest(2805730, "Proton 9.0")))
assertEquals(SteamStorage.Kind.REQUIRED, SteamStorage.kind(manifest(228980, "Steamworks Shared")))
+ assertEquals(SteamStorage.Kind.REQUIRED, SteamStorage.kind(manifest(1826330, "Proton EasyAntiCheat Runtime")))
+ assertEquals(SteamStorage.Kind.REQUIRED, SteamStorage.kind(manifest(1161040, "Proton BattlEye Runtime")))
assertTrue(SteamStorage.isTool(manifest(2805730, "Proton 9.0")))
assertFalse(SteamStorage.isTool(manifest(204360, "CastleCrashers")))
}