Skip to content

Bannerlator 3.1.5

Latest

Choose a tag to compare

@github-actions github-actions released this 03 Oct 22:24
· 53 commits to main since this release

Bannerlator

3.1.5  app-side update  Cutscenes on every DXVK, now on x86_64 too  Wayland experimental

Bannerlator 3.1.5

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

3.1.5 is the cutscene release. In-game videos that were black or skipped — Ninja Gaiden Sigma's opening movies were the test case — now play on every DXVK version on the arm64ec layers, and for the first time on the x86_64 layers. The fixes live in the new v12 Proton layers (the in-app catalog default from today) and in two small pieces the app now ships: a Codecs setting with an optional FFmpeg decoder, and new defaults for new containers — a box64 that can decode video and FEXCore 2609. On X11, mouse and cursor handling also took a big step: raw mouse input, full-colour game cursors, a pointer that hides itself, and an X server that never freezes the app again.

  • Cutscenes: play on DXVK 2.x as well as 3.x (arm64ec), and on x86_64 layers at all. Needs the v12 layers (catalog default) — the app offers them as an in-place update.
  • Codecs setting: GStreamer (default, unchanged) or FFmpeg decoder, plus software decoding. arm64ec only.
  • New containers start on Box64 0.4.5-gst (x86_64 video works) and FEXCore 2609-unix.
  • X11 input: raw mouse through XInput 2 (mouse-look games), full-colour game cursors, idle/controller pointer auto-hide, no more "not responding" while a game compiles shaders.
  • Steam Cloud save sync fixes: API games with a quota, one cloud name per save, saves only.

✅ Nothing to set up. Update the app, then accept the v12 layer update the catalog offers for the layers you use (a revert snapshot is kept). Containers you already have keep their Box64 and FEXCore choices; the new defaults apply to containers you create from now on. x86_64 containers you already have need Box64 0.4.5-gst picked once in Advanced for video to work.

📘 Fast OpenGL (3.1.4) explainer: OpenGL games now run 4 to 5 times faster · LSFG Native guide: LSFG Native Made Simple

What's New — everything since 3.1.4

🎬 Cutscenes: every DXVK version, and x86_64 for the first time

Most console ports play their movies through Windows Media Foundation: a WMV file is decoded, handed from a Direct3D 9 video device to the game's Direct3D 11 renderer as a shared texture, and drawn. Three separate things broke that chain on our layers; all three are fixed in the v12 Proton layers released alongside this version (release notes):

  • The decoder reported nonsense frame durations for WMV (a 129-second "frame"), so the video showed black with sound. Fixed on every layer (the Media Foundation series by NelloKudo plus our duration guards).
  • The shared texture only worked on DXVK 3.0 or newer, because Proton 11 dropped the helper older DXVK uses to describe a shared texture. It is back on the eight Wine 11 layers, so DXVK 2.x plays cutscenes too.
  • x86_64 layers never could: their prefix pack had no Media Foundation handlers at all and pointed the WMV/WMA/AAC/H.264 decoder classes at the wrong DLL, and box64 refused to load the video library because it insisted on GTK. The layers now carry the registrations; box64 is fixed below.

✅ Tested on the Pocket FIT: Ninja Gaiden Sigma's two opening movies on Proton 11.0-2 arm64ec with DXVK 2.4.1 (GStreamer and FFmpeg decoders), and on Proton 11.0-2 x86_64 with DXVK 2.4.1 under box64 — picture, subtitles and sound.

🎛️ Codecs: choose the video decoder

Container settings, game settings and the XMB settings gain a Codecs block in Win Components:

  • Builtin decoder — GStreamer (default): what every layer used before, unchanged.
  • Builtin decoder — FFmpeg (winedmo): Wine's newer FFmpeg-based decoder. Every earlier layer shipped it as an empty shell; the v12 layers really build it. Switch to it for a game whose video stutters or won't play with GStreamer. arm64ec only — on x86_64 the switch has no effect and GStreamer stays in charge.
  • Software decoding: decode on the processor instead of through the GPU device manager, for games whose videos break with hardware decoding.

Behind the scenes the app writes one registry value (HKCU\Software\Wine\MediaFoundation\DisableGstByteStreamHandler) and sets WINE_USE_DMO=1 for FFmpeg; the layers read both. Modelled on Pipetto-crypto's winedmo backport for Proton 9.

📦 New containers start on Box64 0.4.5-gst and FEXCore 2609-unix

  • Box64 0.4.5-gst (bundled, the default for new x86_64 containers): box64 0.4.5 with a one-line fix to its GStreamer wrapper, which demanded a GTK library no Android rootfs has and so blocked all video. The fix is submitted upstream (ptitSeb/box64#4528) and is also in every box64 built by The412Banner/Nightlies from 2026-10-03 on; existing containers can pick Box64-0.4.5-415416f2b-Bionic from the catalog instead.
  • FEXCore 2609-unix (bundled, the default for new arm64ec containers): the stable 2609 build together with its unixlib pair, the same as the catalog's FEXCore-2609-unix. Bundled FEX used to install only the Windows DLL half; the unixlib half is now installed too.
  • The previous bundled versions (Box64 0.3.7, FEXCore 2508) stay available, so containers that use them are untouched.

🖱️ X11: raw mouse, colour cursors, auto-hide, no freezes

  • Raw mouse through XInput 2. Every Wine log on X11 said XInput 2.0 not available: the X server had no XInput extension, so games that read the mouse through raw input — most mouse-look games — got nothing from a real mouse and only a crude fallback from touch. The X server now speaks XInput 2.2 (raw motion and buttons), fed from the app's pointer; touchscreen drags and a hovering stylus count as raw motion too. On automatically for Wine on X11; BANNER_X11_XINPUT2=0 turns it off. Proven on Doom: mouse-look and buttons need it, taps still land.
  • Full-colour game cursors. In Kingdom Come, the Gothic Remake and others the in-game cursor was black and white — on every Winlator fork. The X server never offered the RENDER extension that colour cursors need. It now offers the cursor subset of RENDER, so games show their real cursors (Gothic's blue crystal shard), with a safe fallback to the plain arrow if anything goes wrong. Also fixed on the way: the native-rendering cursor swapped red and blue, and cursors narrower than 64 px came out shredded.
  • The pointer hides itself on X11 when idle or when a controller is driving, like Wayland already did — and the touch that wakes a hidden pointer no longer also clicks.
  • No more "Bannerlator isn't responding." When a game stopped reading X events (an Unreal Engine 5 title compiling a thousand shaders), the X server blocked the app's main thread. Output to the game is now non-blocking with an ordered backlog; motion events collapse to the newest, every click and key is kept. Proven on the Gothic Remake's first-launch shader compile.

💾 Steam Cloud save sync fixes

  • Games whose cloud configuration is only a quota or file limit (Left 4 Dead 2, Counter-Strike: Source) were treated as having no Steam Cloud and never uploaded. They do now, and the cached answer is refreshed once.
  • Steam API games' saves go to the launch mode's own remote store (Goldberg or SteamLite) instead of the install folder.
  • One spelling per cloud name: old duplicates are folded (the newer copy wins, the other is moved aside under SteamCloudSaves/_moved-aside/), and only save files are collected — game data that was swept in is moved aside, not uploaded.
  • One consent prompt for third-party sync; SteamLite launches leave syncing to the client; the Save Manager guide (§6) matches what happens on launch and exit.

📚 Docs

  • Fast OpenGL page: DirectX 12 Turnip fix section with before/after screenshots, plain help section.
  • Wayland deck: honest per-API numbers.

⚠️ Carried over — still open

  • Cutscenes / Codecs:
    • The FFmpeg decoder is arm64ec only; under box64 it can't load its native libraries and the layer falls back to GStreamer (by design).
    • The box64 fix waits on upstream (#4528); until then third-party box64 builds without it can't decode video on x86_64 layers.
    • Layers other than Proton 11.0-2 carry identical patches but were not run on device for this release.
  • X11: animated cursors show their first frame only; ClipCursor with XInput 2 untested; raw-mouse touch drags are on by default (BANNER_X11_XI2_TOUCH=0 turns them off).
  • Save sync: the fixes above are code-reviewed and built, not yet device-tested game by game (L4D2 exit upload, Hades both ways, Sims 4 duplicate merge, Half-Life cleanup).
  • Everything listed as open in 3.1.4 is unchanged: Fast OpenGL's 32-bit-only setups and child-window OpenGL, the Wayland items (Noita once, AIO sweep caveat, Mali/Xclipse/PowerVR testers), and the Linux Steam client items from 3.1.3.
📦 Where to get Proton 9 (tap to expand)

The APK does not bundle Proton 9 — Wine installs from the in-app catalog on first run. The Linux Steam client does not use these layers at all: its games run through Valve's own ARM64 Proton.

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.)

📜 Every change since 3.1.4 — 19 merged, oldest first
  • Fast OpenGL page - plain help section instead of status · f1253555
  • 3.1.4 notes - link the v9 Proton layers under the Sync selector · be5134d0
  • 3.1.4 notes - catalog wording · 27fb74ef
  • Fast OpenGL page - DirectX 12 Turnip fix section with before/after screenshots · f2e3eb2c
  • Wayland deck - slide 3c with honest per-API numbers, slides 3/3b marked as old AIO sweep · f29a84a8
  • Steam Cloud save sync fixes — fix/save-sync · 0ba27f10
  • X11: full-colour game cursors via the RENDER cursor subset · 2da9fba1
  • X server: never block a thread on a client that stopped reading · d495c99b
  • X11: hide the pointer when idle or a controller is driving, like Wayland · 40d93f40
  • X11 auto-hide: honour BANNER_CURSOR_AUTOHIDE from game env, 250 ms pad window · f3ab1171
  • X11 auto-hide: a touch that wakes the hidden pointer doesn't click · 785ecf71
  • TouchpadView: qualify xServer in the wake-gesture field initializer · b43dafdb
  • TouchpadView: end the wake gesture through a method reference · ae510d1e
  • X11: raw mouse through XInput 2 · f377dbda
  • Native rendering: read the cursor's real row pitch · f79ce097
  • Codecs: builtin decoder (GStreamer / FFmpeg-winedmo) + software decoding rows · 324df1f1
  • Codecs: FFmpeg writes DisableGstByteStreamHandler=1 (layers default to GStreamer) · 59817fa5
  • Codecs: say FFmpeg is arm64ec-only in the row help text · 054e927b
  • Defaults: Box64 0.4.5 (GStreamer wrapper fix) and FEXCore 2609-unix for new containers · f3d3e4f4

🙏 Credits (tap to expand)

The cutscene fixes in the v12 layers: the Media Foundation series by NelloKudo; the media-converter gate by GloriousEggroll; the original shared-texture driver (sharedgpures.sys) by Valve (Derek Lesho), rewritten here for Wine 11; the bionic prefix packs and build sysroot by GameNative; winedmo from Wine (Rémi Bernon), with Proton's PCM filter (© 2025 Conor McCarthy for CodeWeavers) replaced by our own. Full per-layer credits are in the v12 layer release.

The Codecs setting is modelled on Pipetto-crypto's winedmo backport for Proton 9 (winlator a81fae78): the pseudo-components in the Win Components list and the WINE_USE_DMO name. No code was copied; the Compose UI and plumbing are new.

box64 is ptitSeb's; the GStreamer-wrapper fix is ours and submitted upstream as #4528. FEXCore is the FEX-Emu team's; the 2609-unix package is the catalog build with its unixlib pair.

XInput 2 raw mouse follows what GameNative and WinNative already do in their X servers, extended with touch and stylus raw motion. Colour cursors came from a Discord #bugs report of black-and-white cursors in Kingdom Come and the Gothic Remake — thank you to the reporter.

Everything credited in 3.1.4 still applies: Fast OpenGL (Mesa, Banners-Turnip, Wine's EGL route), the Wayland adapter (Pipetto-crypto's bionic Vulkan wrapper), winhandler.exe (Winlator by brunodev85), the Turnip fix (Mesa / Turnip by the Freedreno and Mesa teams), the Linux Steam client (Valve, DroidDeck, WinNative, Armada, Termux proot, Arch Linux ARM, FEX-Emu), ntsync (Joshua Tam / joshuatam, GameNative), the bundled Wayland drivers (Vauzi-17, the WinNative development team, StevenMXZ, whitebelyash), DXVK, VKD3D-Proton, Wine, Proton / GE-Proton, box64, SteamKit2 and Wayland.


Entirely app-side — no ImageFS reinstall. Install over 3.1.4 or any earlier 3.1.x; everything carries over. Then take the v12 layer update from the catalog.