Skip to content

BottleShip 0.7

Latest

Choose a tag to compare

@jenissimo jenissimo released this 08 Oct 08:57
· 3 commits to main since this release

BottleShip 0.7 expands game compatibility, improves rendering and importing, and adds
experimental AOT code caching. This release includes everything merged into main
since October 5, 2026, through the 0.7 release on October 8.

What's new

  • Compatibility has grown from 15 to 53 games. Titles now running include
    Need for Speed: Underground 2, XIII, Far Cry, The Bard's Tale and Mafia.
    See the full compatibility list
    for the tested editions, demo coverage and remaining limitations.
  • An optimized Direct3D 9 implementation. Rendering runs in a dedicated worker,
    with batched WebGPU submission and broader shader, texture and render-state support.
  • It's easier to add your own GOG games. Import supported offline installers,
    including multipart EXE + BIN downloads, directly into the library. Review the
    executable and settings, save the package, or download a reusable WGB. In Chrome,
    you can also select an installed game folder or a GOG installer folder. Everything
    is processed locally. GOG import guide.
  • On-screen controls for mobile devices. Touch controls, configurable virtual
    gamepad layouts and an on-screen keyboard make more games accessible without a
    physical keyboard and mouse.
  • Improved loading times and frame rates across many games. CPU and rendering
    optimizations are joined by persistent streaming caches: downloaded bundle ranges
    are reused locally, and cold file reads park the guest instead of wasting CPU time.
    Results depend on the game, browser and hardware; large demos can still take time
    to load on their first run.
  • Experimental AOT code caching. Record WebAssembly generated while a game runs,
    save it locally and reuse compatible code on later launches. More on this below.
  • A much larger public demo library. There are now 42 entries, with original
    cover artwork, a curated featured order and sorting by title, genre or year.
    Recent additions include Thief Gold, Cossacks, Mafia and Blade of Darkness.
    Try the library.

Installer support has also expanded to supported variants of NSIS, MSI/CAB, Wise,
VISE, older InstallShield payloads and RAR4 self-extractors. Improvements to native
launchers and child processes, saving, legacy text rendering and palette handling
help more games get from their setup screens into gameplay. Demo verification stages
are recorded separately in the compatibility document.

AOT today

The CPU emulator's JIT translates x86 code into WebAssembly as the game runs.
BottleShip can now record those generated modules, persist them in browser storage
and load compatible ones again on a later run of the same game. Unrecorded code
continues through the normal JIT, and cached code is checked against the game's code
pages and the runtime configuration before reuse.

To try it, open Developer tools from the in-game toolbar:

  1. Click AOT: Record.
  2. Play the scenes you want to capture.
  3. Click AOT: Save before closing the game.
  4. Leave AOT: Auto enabled and reload the same game. AOT: Status shows the
    loaded units and whether they have actually been entered.

This is the first step toward a broader AOT pipeline. The current user-facing
feature reuses recorded JIT output; experimental offline compiler and correctness
tools are also in the repository. Whole-game recompilation and near-native
performance are research goals.

Next version: two big goals

  1. Bring games from 2006–2009 into reach, with good performance. We'd like to
    push toward the later years of the 32-bit Windows era with titles such as
    Command & Conquer: Red Alert 3, Batman: Arkham Asylum, Assassin's Creed and
    Burnout Paradise
    . These are targets for upcoming work.
  2. Explore static recompilation of x86 games into WebAssembly without source
    code.
    The JIT already produces WASM, and AOT recording lets us keep it. The
    next question is whether we can analyze and optimize that code enough to get
    performance close to native ports built from source. That's the ambitious part
    we'd like to investigate :)

Detailed changelog
· Source changes since October 5