Skip to content

Bannerlator 3.0.7 - EA Support For Steam Library Titles!

Latest

Choose a tag to compare

@github-actions github-actions released this 07 Sep 00:17
· 22 commits to main since this release

Bannerlator

3.0.7  app-side update

Bannerlator 3.0.7

Run Windows apps and games on Android — no PC and no root required.

3.0.7 is the EA update. EA-published games in your Steam library now launch the way they do on a PC: Steam starts EA Desktop, EA Desktop starts the game, and Bannerlator handles the whole chain for you. Add the game, run the one-time Set up EA Desktop session, and from then on it is press-play. Proven on device with Need for Speed Payback, Need for Speed Most Wanted (2012), Need for Speed Rivals and STAR WARS Jedi: Survivor. Also in this release: a rebuilt Input Controls import flow with live layout previews, a truthful HUD API line on EA titles, and LSFG Native's pending follow-ups.

Video: Bannerlator 3.0.7 — end-to-end EA support setup and gameplay with a Need for Speed title
▶ Watch on YouTube: end-to-end EA support — setup through gameplay with a Need for Speed title (youtu.be/FwWjWacPpgo)

A first for the Winlator family. Bannerlator is the first emulator outside GameHub to offer EA titles from your Steam library, and with each release it moves closer to 1:1 parity with the features GameHub offers and supports — a big win for the Winlator community and its forks.

⚠️ Read the EA "Known limitations" section before you test. Older EA games ask for your EA sign-in on every launch, and EA counts every one of those sign-ins. Launch an older EA title many times in a short period and EA will refuse it for a while ("too many computers"). This is EA's server, not a bug you can fix by reinstalling.

⚠️ Win-FG frame generation is still EXPERIMENTAL — unchanged in this release. It is off by default; if it misbehaves, leave it off.

What's New — everything since 3.0.6

🎮 EA games from your Steam library

  • Bannerlator recognises them. Add an EA-published game from your Steam library and it gets an EA badge. Both generations are detected: Origin-era titles (the ones that ship Link2EA / EASteamProxy and their own activation files) and EA-app-era titles (Jedi: Survivor's layout, which ships only EA's installer).
  • One guided setup, once per container. The first launch offers Set up EA Desktop: a single session that puts EA's launcher into the container. You click through EA's own installer; Bannerlator does the rest (Mono, Gecko, the registry EA expects, the Steam install script the game needs). No second session, no hand edits.
  • Then just press play. The game starts through Steam and EA Desktop on its own, in the right order, and Bannerlator keeps the session alive while EA Desktop does its hand-offs instead of mistaking them for the game closing. If EA relaunches the game after an activation, the session waits for it.
  • What it needs. The SteamLite (Real Steam) launch mode, which the app selects and remembers for EA titles (Goldberg and Raw cannot start EA games); the -4 compatibility layers from the current catalog — GE-Proton 11.0-6 recommended (EA Desktop needs their networking and GDI+ fixes; see New compatibility layers below — install from Containers → download icon); and the hosted SteamLite v7 client, offered as an update at launch.
  • When EA says no, you see why. If EA Desktop refuses to license the game (for example "Concurrency guard limit"), Bannerlator shows a card naming EA's reason, with Retry, Open log folder and Close, instead of a black screen.
  • EA titles using EA's newer anti-cheat (Javelin) — Need for Speed Unbound and friends — are refused up front with a clear message. They are not supported.

📦 New compatibility layers — the EA Desktop installer and online fixes

EA Desktop would not install or go online on the previous layers, so this release comes with a rebuilt set of all seven Proton / GE-Proton layers (proton-wine release build-bionic-layers-20260906-eanet2, now the in-app catalog default). They install into a new -arm64ec-4 slot beside your existing layers; nothing is overwritten. Create a fresh container on a -4 layer for EA titles — an old container keeps its old layer.

Layer Installs as Notes
GE-Proton 11.0-6 11.0-6-arm64ec-4 The layer EA support was proven on. Recommended for EA titles.
GE-Proton 11.0-5 11.0-5-arm64ec-4
GE-Proton 11.0-3 11.0-3-arm64ec-4
Proton 11.0-1 11.0-1-arm64ec-4 Plain Valve tier
Proton 11.0-2 11.0-2-arm64ec-4 arm64ec and x86_64 builds
Proton 10.0-4 10.0-4-arm64ec-4 Wine 10: networking fixes only (its GDI+ never had the bug)
GE-Proton 10.0-34 10.0-34-arm64ec-4 Wine 10: networking fixes only

What changed, and why it matters for EA:

  • The EA installer no longer aborts (Wine 11 layers). EA's installer is a WiX wizard drawn with GDI+. Right after Let's go it redraws a region that has a zero-width span, and Wine 11's GDI+ region code treated that as impossible and hit an assertion — the installer died with exit code 3 before it copied a single file, which is why Set up EA Desktop used to end in nothing. The span is now clamped instead of asserted, and the wizard runs to completion. Wine 10's older region code has no such assertion, so the two Wine 10 layers did not need it.
  • EA Desktop can go online. Two Android networking gaps made EA's client declare itself offline the moment it started. Android's name resolver rejects the dual-stack lookup flags EA's network stack asks for, so every DNS lookup failed; ws2_32 now emulates those flags with a second IPv4 lookup. And the container had no default route, so Windows' "which interface reaches this host" calls failed; nsiproxy now publishes an on-link subnet route plus a real default route. Together: EA Desktop signs in, prefetches licences and launches games, with zero connection errors in testing.
  • Everything from the previous fontcap layers carries over: the realized-font-handle cap (the TF2 / Source map-change freeze cure), SD-card boot fix, C.UTF-8 locale, DirectAudio v1.3.1 (opt-in), FEX-unixlib loader, XRandR / XRender. No FEX, DXVK or other changes versus fontcap.

⚠️ EA — known limitations (read before testing)

  • Older EA games (Origin-era, e.g. Need for Speed Payback) ask for your EA sign-in on every launch. They play fine after you sign in. Newer EA-app-era titles (Most Wanted 2012, Jedi: Survivor) sign in through Steam automatically and never prompt. We tested eight local theories for the repeat prompt on device; none stopped it. It is the game's own embedded Origin activation re-verifying the machine each launch.
  • EA counts those sign-ins as activations and limits them. Launching an older EA title many times in a short period, or across several containers, makes EA temporarily refuse the game. The game shows EA's own message ("Too many computers have accessed this account's version…"). It clears by itself after some hours, or immediately via Deauthorize computers in your EA account's Security settings.
  • Every container looks like a separate PC to EA. Do not create throwaway containers for EA games — each one uses a licence slot for every EA game you launch in it.
  • Need for Speed (2015) signs in and activates, then sits on a black screen. EA's token tool fails inside the container (GetGameToken exit 1). Under investigation.
  • The in-game HUD's API line now reads the game's real API on EA titles (Payback: D3D11 · DXVK). Previously EA's overlay made it say D3D12.

🕹️ Input Controls — import flow rebuilt

  • The arrows point the right way. Import is a download arrow, both Exports are upload arrows.
  • A proper import chooser. Importing a profile opens the app's own outlined dialog with three sources — the in-app file manager, the system picker, or the community download list — separated by dividers and scrollable in landscape. The raw system list dialog is gone.
  • Preview before you download. Every row in Download Profiles has an eye button that renders that layout live, exactly as the On-Screen tab does, so you can pick a community layout without importing everything first.

🎞️ LSFG Native — follow-ups

  • Frames leave as soon as they are ready. Each generated frame is now recorded, submitted and presented on its own, so a finished frame reaches the display without waiting for the rest of the chain.
  • The drawer shows what generation costs. A GPU timestamp pair around the chain reports ms per generated frame in the frame-generation drawer — the number that tells you whether a game has headroom for frame generation before it quietly stops generating.
  • Shader cache built at import. Settings builds the SPIR-V cache right after Detect / Import (and on opening Settings if it is stale), with a status line, so the first launch after importing is no longer the slow one. Remove deletes the cache.
  • Pacer ceiling from the panel's top mode. The refresh rate fed to the pacer is the panel's highest mode, not whatever the display happened to report mid-game, so a frame-rate override no longer caps 4× down to 2×.

🛠️ Fixes

  • Stray "EA" cards no longer appear in the Games grid after installing EA Desktop. Store-client shortcuts that Wine's menu builder drops on the desktop are filtered out; real games are never filtered.
  • SteamLite / Goldberg updates can no longer leave the client missing. The download is extracted to a staging folder and verified before it replaces the installed copy; a failed update keeps the old client.
  • One broken shortcut file can no longer crash the app at start. An unreadable or truncated .desktop entry is skipped and logged; the rest of your library still loads.
  • EA titles on app-built containers render. EA Desktop launched the game from a registry path with a in it, which Frostbite could not open; the path now uses the plain-ASCII Steam library link.
  • Install-script registry parity with the real Steam client. Steam's language block is written as its <key>\<language> subkey too, and plain hive roots go to both 32-bit and 64-bit views, so EA's activation can find the game's display name.

⚠️ Carried over — still open

  • Cancelling a Steam download removes it from the list but does not yet stop the transfer engine underneath. Force-stop the app to be certain it stopped.
  • 64-bit titles launched directly by Steam can still crash at startup with the overlay-injection signature and fall back to an insecure start; 32-bit-launcher titles (CS:S, TF2, L4D2) are unaffected.
  • Rockstar Games Launcher titles (GTA V Enhanced) are not supported: the launcher installs but its Social Club web UI never loads inside the container.
  • The Java Steam engine fallback is still present. Its removal has moved again, to a later release.

📦 Where to get Proton 9

The APK does not bundle Proton 9 — Wine installs from the in-app catalog on first run.

⚠️ A fresh install ships with no Wine at all. On first run, open Containers → the download icon and install a Proton before creating a container. Updating from 3.0.6 changes nothing — your existing containers and Wine installs are untouched. EA titles need the GE-Proton 11.0-6 / Proton 11 layers from the catalog.

Proton 9.0 arm64ec — not bundled, download it if you want it:

https://github.com/The412Banner/Nightlies/releases/download/Proton/wine/proton-9.0-arm64ec.wcp

66.7 MB · sha256 f8a99fed387f1b097009129dc49368c8f500927640a9d4c7a192d850b1b2068c
Install it via Containers → download icon → install the .wcp. It also appears in the in-app catalog. (Compiled as a wcp by Xnick417x.)


🙏 Credits

🙏 EA-on-Steam was researched and implemented by The412Banner, by reverse-engineering the methods and techniques GameHub uses to run EA titles — how the Steam → EA Desktop chain is held together, what the container has to provide, and how EA's activation behaves — and re-implementing that approach for Bannerlator on top of its own SteamLite agent. The agent itself is derived from WinNative's GPL wn-steam-launcher — the launcher-chain hold that keeps the session alive through Steam → Link2EA → EA Desktop → game is an extension of that work. Thanks to GloriousEggroll for GE-Proton 11.0-6, whose game patches the EA layers are built on, and to the Wine and FEX-Emu teams for the runtime underneath EA Desktop.

Built on the work of many open-source projects and their communities:

  • Native Steam engine & SteamLite agent — derived from WinNative's GPL wnsteam client and wn-steam-launcher (hardened, extended and rebranded here); protocol groundwork from SteamKit2 (the SteamRE team).
  • Steam (fallback engine)JavaSteam (joshuatam's fork of SteamKit2) and Goldberg / gbe_fork (Detanup01 & contributors).
  • Graphics & Frame GenerationEden (native LSFG present path) and WinNative (design reference); DXVK (Philip Rebohle & contributors), VKD3D-Proton (Hans-Kristian Arntzen & contributors), Mesa / Turnip (the Freedreno & Mesa teams), and AMD FidelityFX (FSR).
  • Containers, launch & runtimeWine (WineHQ) and Proton / GE-Proton (Valve & GloriousEggroll); box64 (ptitSeb) and FEXCore (the FEX-Emu team).
  • Audio — Android AAudio, driven by our own DirectAudio endpoint.
  • The app itselfWinlator (brunodev85) and its Cmod lineage; GameNative (GPL-3.0) for the Steam session-hardening and present paths.

Steam is a trademark of Valve Corporation; EA, EA Desktop, Origin, Need for Speed and Frostbite are trademarks of Electronic Arts Inc.; STAR WARS is a trademark of Lucasfilm Ltd.; Lossless Scaling is by THS; other names are trademarks of their respective owners. Bannerlator is an independent project — not affiliated with or endorsed by any of them. Each component remains under its own license.


Entirely app-side — no ImageFS reinstall. Install over 3.0.6; everything carries over.