Status: preview — from 0.1.8 on it updates itself; from 0.1.7 or earlier, download the latest release once by hand Last updated: 2026-10-30 Summary: the native Battle Engine Aquila port, the one-time manual move from 0.1.7 or earlier, signed updates and source build.
This README follows this source branch, which can describe work that is not in the latest download. The README packaged with your download and the release notes describe the version you installed. Versions 0.1.8 and later have a signed-update path; versions 0.1.0 through 0.1.7 require the one-time manual migration below. On Linux, if you still use 0.1.8 or 0.1.9, check the 0.1.12 release notes for their 32-bit dependency caveat.
A native port of Battle Engine Aquila; you need your own copy.
Why by hand, this once? The updater in Onslaught CE 0.1.0–0.1.6 tidied up at startup by deleting any folder next
to the game folder whose name started like it (for example Onslaught CE.old-backup beside Onslaught CE). We know
of no case where this deleted anything of a player's, but it could, so 0.1.7 switched updating off. 0.1.8 brings
updates back with a new updater that only ever touches its own two folders (versions inside the Onslaught CE folder
and update-v2 in your user folder), never anything beside them; it checks every update's signature before using
it, and can go back to the previous version. Old launchers cannot reach it, so you
download the latest release yourself once; after that it updates itself.
From any earlier Onslaught CE (0.1.0 to 0.1.7):
- Close Onslaught CE. Do not start the old version again (from 0.1.0–0.1.6, not even to check its version).
- Back up your careers and settings: copy the folder
~/.local/share/onslaught-ce(Linux) or%APPDATA%\Onslaught CE(Windows; paste that into the Explorer address bar) somewhere safe. - Download the latest package for your system from the Releases page.
- Extract it into a new, empty folder. Do not extract it over the old one.
- Run
onslaught-ce(Linux) oronslaught-ce.exe(Windows) from the new folder. It finds your careers and settings by itself. Then point your shortcut at the new folder.
Keep the old folder and your backup until you are happy; never run the old launcher. If you set BEA_USER_DIR for
an earlier version, set it the same way for the new version. Anything unusual (a relative BEA_USER_DIR, data in
several places, folders you are unsure of): follow the
detailed migration instead.
New players start here. If you already have Onslaught CE, follow Getting the latest version instead.
- Choose the package for your system from the Releases page. Extract it into a new, empty, ordinary folder, separate from the original game and every old CE folder.
- Run
onslaught-ce(Linux) oronslaught-ce.exe(Windows). - It finds your Steam copy of Battle Engine Aquila by itself, or asks once where it is.
Keep the program and its user folder separate from the original game. Careers and settings go to
$XDG_DATA_HOME/onslaught-ce (Linux, or ~/.local/share/onslaught-ce when unset) or
%APPDATA%\Onslaught CE (Windows) by default. Keep recovery copies of your careers before changing save locations
or removing any program folder.
Onslaught CE is a native port of Battle Engine Aquila (Lost Toys, 2003) for Linux (i686) and Windows (i686), built from the game's source code.
The source has three parts:
- The upstream GPL Onslaught source (stuart73/Onslaught).
- A byte-matching decompilation that reconstructs more of the PC code (onslaught-decomp), which records its measured matching coverage and reconstruction concessions. The native port uses a different compiler and replacement platform code.
- A platform layer: SDL3, with dxvk-native on Linux and the system's Direct3D 9 on Windows.
This is an early preview. After installing a corrected successor, its main menu and onslaught-ce --version
show its version and build. Use existing logs to identify an affected installation without running its launcher.
See the latest release notes for the checks performed
and remaining limits; development source may include changes beyond that published package.
- Main menu > Onslaught CE: a page with Bonus Levels, CE Settings, Cheats, Help & Info and Report a Problem. Each row has a hint under the list. The Options page is the original's.
- Bonus Levels: Aquila Prototype, Building Defence, and Race Challenge 1 to 5 (each below). None of them advances career progress. A bonus level started here comes back to this list with its row highlighted.
- CE Settings: Record Play for Bug Reports (see Help make Onslaught CE more faithful).
- Help & Info: Controls & Tips (dodge, zoom, photo mode and screenshots, the console, the free camera and the
commander map), What's Coming (planned features and their current limits; its entries do not start those features),
Updates & Rollback (whether checking is on, how to roll back, where
ce.iniis), About Onslaught CE (version, licence and links) and Special Thanks. This page is not in the 0.1.12 download. - Aquila Prototype: level 201, the original's playable-demo level, which the full game never offers. It does not advance career progress and returns to the Bonus Levels list. Settings can still be saved, including into a career file.
- Building Defence: a two-player co-op map (level 856) that the original's Multiplayer page leaves out: together, defend the island's buildings against the landing craft. The original ships this scenario twice, as levels 856 and 858, which are the same map, so the list has one entry. Both players share this PC, in split screen, as in the original's multiplayer: each picks a Battle Engine on the Multiplayer start page; player 2 uses the second set of keys in Controller Options, or a second gamepad. Like the other bonus levels it does not advance career progress and comes back to the Bonus Levels list; settings can still be saved.
- Race Challenge 1 to 5: the original's five one-player time trials (levels 901 to 905): three laps against the clock in the Racer Battle Engine. The original opens them from the Goodies page, in the five cells that follow the first eight of its top row: Race Challenge 1 once you have a grade of C or better in 26 campaign levels, and each later race when the one before it is finished fast enough (under 145, 195, 150 and 105 seconds for races 1 to 4; the fifth opens nothing more). The Unlock All Goodies cheat opens all five at once (see Cheats). Those routes save your career as the original does. The five rows on the Bonus Levels list start the races with none of that. Like the other bonus levels, a race does not advance career progress; when it ends (finished, lost or quit from the pause menu) nothing is saved and you are back on the Bonus Levels list, with that race highlighted. Settings can still be saved during play, including into a career file; bonus-level progress is left out.
- Cheats: the original game's cheats as On/Off switches, on the Onslaught CE page; see Cheats.
- The console: the original's developer console, back for solo play; press the
`(grave) key, left of 1 on a US keyboard. See The console. - Controllers: gamepads and flight sticks have menu controls and default play controls for solo and bonus co-op when joystick bindings have not been customized. Other local multiplayer uses Controller Options. Controllers can be plugged in while the game runs; for two players, plug both in before starting. See port/controller-input.md.
- Keyboard: the port releases held keys on focus loss and attempts to repair delayed releases. Typed characters come from key presses rather than a desktop input method; letter and digit keys use their physical positions across keyboard layouts. For the walker's special move, see Dodging.
- Alt-Tab and minimizing: CE holds the game clock while it waits for a minimized window, helping avoid a fast-forward when you return (the original can do that on a fast PC;
BEA_PORT_MINIMIZED_CLOCK=runbrings that back for comparison). This adjustment is off during recordings and replays. - A quiet console: the developers' messages are hidden unless
BEA_PORT_VERBOSE=1is set. - A log file for reports,
onslaught-ce.login your user folder, and session recording (both below).
In walker mode, with your Battle Engine on the ground and not already dodging, use the default US keyboard bindings:
- Dodge right: tap A, then D.
- Dodge left: tap D, then A.
Try releasing the first key before pressing the other. Aim for about 0.15 game seconds between presses: with the default timing, the second press must be more than 0.1 and less than 0.2 game seconds after the first. Too fast or too slow will not trigger a dodge. If you changed the bindings or use a different keyboard layout, check the left and right movement inputs in Controller Options and use those instead.
In eligible ordinary solo play, the English tutorial can show a contextual dodge cue when the radio message starts. The cue is off during session recording and replay; use this guide while recording. The same keyboard sequence and timing apply.
With the default mouse binding, scroll the wheel down to zoom in and up to zoom out. With the default gamepad bindings in eligible ordinary play, the right bumper zooms in and the left bumper zooms out. You can change the bindings in Controller Options. Manual zoom only works with weapons that support it; some weapons zoom while charging instead. The English tutorial can show a zoom cue in eligible ordinary solo play, but not in recordings or replays.
Onslaught CE > Cheats, in the main menu, turns the original game's cheats on and off. They are kept in ce.ini in your user folder and apply
to every career. Typing a code into a career's name works too, as in the original. The Cheats page's switches are off
while a session is being recorded and in replays; a code typed into a career's name still works then, as in the
original.
| Cheat | Original code | What it does |
|---|---|---|
| Unlock All Levels | TURKEY | Every level shows as open in the level select. Your career's real progress is not changed. In the console it also allows map, win and lose. |
| Unlock All Goodies | MALLOY | Every goodie on the Goodies page is open. Nothing is written to your career. |
| Goodie Hints | latête | The Goodies page shows the available unlock hints. While it is on, goodies cannot be opened, even with Unlock All Goodies. |
| God Mode Option | Maladim | Adds God to Controller Options (in the pause menu, applying at once, and in Options, from the next level). God on: no damage and energy that never runs out. Set this way it is kept in ce.ini, not in your career. Turning the cheat off ends god mode. |
| Free Camera | Aurore | In a level, F detaches the camera so you can fly around the battle. In the console it also allows camera and the remote camera. |
These are default keyboard bindings. In ordinary play, Space changes the Battle Engine between walker and aircraft. F toggles Free Camera when its cheat is enabled. With the defaults, use the arrow keys to look around in Free Camera; ordinary mouse-look does not turn that camera.
Free Camera controls:
- F: free camera on or off. Off returns to your previous view.
- W / S: fly forward and back, in the direction you are looking.
- A / D: slide left and right.
- Arrow keys: turn left and right, look up and down. There is no up or down key and no speed key: look up or down, then fly, at one fixed speed.
- Esc: freeze or unfreeze the battle without a menu. The camera still flies while the battle is frozen, so you can line up a screenshot. With photo mode (F11) the view is clear of the HUD, and F12 saves it.
The battle keeps going while you look around unless you freeze it, and your Battle Engine can be hit.
The cheats themselves write nothing to your career (only the end-of-level statistics read the original's count of
god-mode uses, to show "CHEATER!"). A level you finish with their help, including one ended with the console's win,
counts like any other: a win opens the next levels, earns its goodies and records its grade (a level's grade is only
ever raised, never lowered). A code in a career's name works when the name contains it exactly, including latête on Linux
and Windows.
The original game has a developer console that the PC release never showed. Onslaught CE brings it back for solo play:
press the ` (grave) key, left of 1 on a US keyboard, during a level. It drops down over the top of the screen, as a
dark panel with the game's own log (what it loaded, and what commands print), and takes a command line. It never runs
the original's command interpreter: it has its own list of commands, and never runs script files or key binds (so an
autoexec.con in the game folder is ignored).
- Keys: Enter runs the line, Tab completes a command name, Up and Down recall earlier lines, PgUp and PgDn scroll the log, Esc or the grave key closes the console. The game does not pause for it. A line holds up to 63 printable characters; anything longer, or a character the console cannot take, is refused rather than cut.
- Always available:
help(andhelp <command>),version,status,showvars,show <variable>,set <variable> <value>(views, weather, hit-flash colours and the console's owncg_consolealpha, each checked against its range),cg_whatami(graphics card),listatmospherics,navmaponandnavmapoff(the landscape's navigation map),setgammabias <0 to 0.005>(full screen only),fmv_play(lists the game's films: the cutscenes 1-33,GILL_M_on_a_forkandUsTheMovieplay from the Goodies page,ltlogoandopeningfmvwhen the game starts; none plays during a battle),playsound <name>(a sound the level has already loaded) andsplitscreen horizontal|vertical(for the next two-player game). - Developer information:
devstats(ordevstats on/off) shows the original developers' information text in the top left: level, game time, event-list size and events processed, thing count, frame rate, health, energy and score (or "GOD mode Score") and the Aug bar, and the game's own DEFAULT heap use. It is the text the developer build drew; the PC release never showed it. The TEXDATA and VBDATA heap lines of the original are left out: the PC game has no such heaps.dev_stats=1ince.initurns it on in every level;devstatschanges it until the level ends. It is pale yellow as in the original, or green withconsole_theme=green, and only reads the game. - Your music:
musicsays what your playlist holds and plays;music adddir <folder>adds a folder of your own tracks (the rest of the line is the folder, spaces included);music playtype single|linear|random;music nextskips to your next track;music cleargoes back to the game's music. These are the original's playlist commands (m_adddir,m_playtype), which the PC release never registered. They last for the session;ce.inikeeps the settings (below). - Photo mode:
photo(orphoto on/off) hides the HUD for pictures, as F11 does, and closes the console; F12 saves a screenshot (below). - With Free Camera on:
camera(as the F key),remotecameraon(views from whatever is under the crosshair) andremotecameraoff. - With Unlock All Levels on:
map <level>(leaves this level for another campaign level),winandlose. A win from the console counts in your career like any other win. - Put back at the end of each level: every variable
setchanged, the navigation map, the gamma bias and the remote camera. - Not available:
exec,bind,memstats,dumpmem,dumptexturesand the original's other developer commands that write files or run scripts;quitpoints you at the pause menu. The console is closed in multiplayer, in network games, in demos, and while a session is recorded or replayed. console_theme=greenince.inidraws the text in green. This is an Onslaught CE choice: nothing shows that the original's console was green.
- F11 (or the console's
photo,photo on/off) hides the HUD for pictures: the cockpit, the HUD and its radio messages, the battle line and the developer information. Menus, the pause menu, the message log and the end-of-level screens are still drawn, since they take your input. F11 again, or the end of the level, brings everything back. It needs no cheat: it only hides drawing, and the battle plays out as it would without it. To fly the camera around the battle, and to freeze it while you frame a shot (Esc), use the Free Camera cheat (above) with it. - F12 saves what is on screen as a PNG in the
screenshotsfolder of your user folder, named by the date and time (onslaught-ce-20261029-153012.png, then-2,-3... in the same second). It never replaces a file. A note at the bottom of the screen says it was saved; the note is never in the picture. The folder holds up to 2000 files: move some out when it says it is full. - Photo Mode in the pause menu: in a single-player level the pause menu has a Photo Mode row, between the options rows and Retry, so a gamepad can reach it. Choosing it closes the menu, resumes the battle and turns photo mode on, as F11 does, and writes nothing (not a career, not your settings). While photo mode is on the row reads End Photo Mode: open the pause menu again and choose it to bring everything back. In multiplayer, a network game, a demo, a recording or a replay the row is not drawn and cannot be chosen.
- F11 and F12 work in single-player levels, but not while a session is recorded or replayed, in multiplayer, a network game or a demo. A key-capturing menu or the console can take these keys first. Photo mode is tested on Linux; Windows testing of it is limited (see the release notes).
Three things the original team built that the PC release left switched off. Each is an Onslaught CE option in ce.ini
in your user folder, and none of them is ever on while a session is recorded or replayed, in a network game or in a
demo.
- Your own music (
music_dir,music_playtype):music_dir=the full path of a folder of.oggtracks plays them in place of the level music (the front end and the credits keep the game's own).music_playtype=linear(the default) plays them in name order and round again,randomshuffles them,singleplays one and then stays quiet until the next level's music. A track must be Ogg Vorbis, stereo, 44100 Hz (the one format the game's music player plays; others are left out and counted in the log), with a full path of at most 255 bytes. Up to 256 tracks are used from the folder, which is read, never written; subfolders are not searched. On Linux~/is your home folder. The game pauses for about three seconds between tracks, as it does between its own. The console'smusiccommands change it for the session. - End-of-level statistics (
debrief_stats, on unless set to 0): the victory and defeat screens list your mission time, time in jet and walker mode, rounds fired, accuracy (once you have fired) and damage taken, in the original's own words and layout, and "CHEATER!" in red when god mode was on. The game kept counting these; the PC release left the panel commented out. - Gamepad rumble (
rumble, on unless set to 0): CE requests a rumble when your Battle Engine is hit or shaken by its own weapons, with the effect present in the upstream PC source (the released game's rumble call was empty): full strength for a quarter of a second. Gamepads only; flight sticks do not rumble. Player 1's request goes to the first controller slot and player 2's to the second. Custom Controller Options bindings do not change which slot is used. It needs a controller with rumble motors; nobody has tested how it feels on one yet.
commander=1 in ce.ini (off unless you set it) turns on a map of the battle for single-player levels. Press M to open it;
the battle pauses while it is open. Your squads are green boxes with their unit counts, the enemy squads are red (every enemy squad the game reports as detectable, however far from you:
this is not the HUD's radar), and the cross is you. Click a box (or press Tab) to pick a squad, then give it an order:
- Right click a place: Move there. A passive march: the squad does not fire on the way, and it stays passive once it has arrived, even when it is attacked, until you give it another order (H or X makes it fight where it stands).
- A, then click a place: Advance there. The squad fights what it meets on the way.
- H or X: Hold. The squad stays where it is and fires at what comes into range.
- R: Fall back to the nearest safe place on your side. It is a Move to that place, so it is passive in the same way, on the way and once there, until you give another order.
The mouse wheel, Q and E zoom, the arrow keys pan, Space centres the map on you, C on the picked squad, Home on the whole action. Esc cancels an armed order, then drops the pick, then closes; M closes. Squads that follow a mission script, aircraft, turrets, buildings and mission objectives take no orders (the map says so when you try); artillery can only Hold. Until the level has started, M answers "The battle has not started yet." The map never opens in a recorded or replayed session, a network game, a demo or the front end.
It is an experiment. The map is drawn from the level's heights, not the 3D view, and the orders are the game's own squad commands. It has only been run on Linux: there is no gamepad control for it, and no Windows build has run it. Turn it off by removing the line.
Onslaught CE is an unofficial fan project. It is not affiliated with or endorsed by the game's developer, publisher or rights holders; Battle Engine Aquila is a trademark of its owners.
No game files are included. You need your own copy of Battle Engine Aquila for PC, for example from Steam.
- Onslaught CE runs from its own folder and reads the game's data from your installation. Its default user folder keeps careers and settings separate from that installation.
- The
onslaught-celauncher finds Steam installs automatically. On Linux it looks in Steam library folders and in native,~/.steamand Flatpak Steam installs. On Windows it uses Steam's library folders and the registry. If it can't find an install, it asks you once to pick the game folder. To choose the folder yourself, setBEA_GAME_DIR. - Saves and settings are stored in:
- Linux:
$XDG_DATA_HOME/onslaught-ce, or~/.local/share/onslaught-cewhen unset - Windows:
%APPDATA%\Onslaught CE
- Linux:
BEA_USER_DIR overrides that location. Use a separate ordinary directory, not the game folder or a link into it.
The settings writer refuses linked parent paths; the Linux save writer also refuses linked and hard-linked write
targets. These checks do not make arbitrary redirected folders safe on every platform. Original-install careers
remain available in the load menu, with a CE career of the same on-disk name taking precedence. On Linux, if a name
has both an older one-byte spelling and a UTF-8 spelling, the older spelling can be selected even when it is in the
original folder. Keep both files and seek help before overwriting either one.
How a career is saved (0.1.10 and later). A career, and defaultoptions.bea, is written to a temporary file in the same
folder, flushed to disk and read back; only then is it moved over the old file in one step. A save that fails part-way leaves
the previous file as it was. Saving over a name that already exists asks once: Yes writes your new career into the Onslaught CE
folder (also when the name belongs to a career in the original game's savegames folder, which is never written), No changes
nothing. If the game or the computer stops in the middle of a save, a hidden temporary file named .ce-write-<number>-<number>
(on Windows with .tmp added) can be left in the savegames folder. It is not a career and the game does not list it; you may
delete it. From 0.1.11, two of the game's automatic saves say so when they fail: after the pause menu's Continue the game's own save error
message ("An error occurred during saving." in English, and in the language you chose) appears for a few seconds at the bottom of
the screen, and after a language change in the front end it appears in the usual message box. The career you had is unchanged. Its other automatic saves of
settings (leaving the Options page, after loading a career, a display reset) stay quiet. Recordings and replays show neither.
On Linux, a career filename whose in-game name exceeds 31 16-bit units is omitted from the list because it cannot fit the game's name field. The game emits a name-free diagnostic once, normally captured in a launcher log; it does not show an on-screen warning. This check does not change the file. If a career is missing, keep its file and ask for help before changing it.
Close the game and launcher before editing ce.ini or changing it through another tool. Concurrent settings changes
can overwrite one another.
Supported edition. The launcher accepts an install whose two mission data files match the SHA-256 hashes in
config/game-data.sha256, which come from the Steam edition. Other editions can have different files and may be
refused with "not a supported Battle Engine Aquila install" (the launcher says which file and why). If yours is
refused, please open an issue naming the edition and that message.
Download the latest release from this repository's Releases page. If you have an earlier Onslaught CE, read Getting the latest version first.
Download ASSETS.txt from the same release into the folder containing your package. It lists the SHA-256,
byte size and name of each downloadable file except itself and RC-REPORT.txt; releases before 0.1.2 omit the size. It is not directly a sha256sum --check file.
In Bash on Linux, this command handles either form and checks just the package you name (change package to your
download's filename). A successful check prints that filename followed by OK and exits zero. A missing entry,
missing file, malformed list or changed download fails the check.
package=onslaught-ce-linux-i686.tar.gz # or onslaught-ce-X.Y.Z-linux-i686.tar.gz
set -o pipefail
awk -v package="$package" '
/^[[:space:]]*$/ || /^Onslaught CE / || /^Source: / { next }
length($1) == 64 && $1 ~ /^[0-9a-f]+$/ && (NF == 2 || (NF == 3 && $2 ~ /^[0-9]+$/)) {
if (seen[$NF]++) exit 1
if ($NF == package) { found++; print $1 " " $NF }
next
}
{ exit 1 }
END { if (found != 1) exit 1 }
' ASSETS.txt | sha256sum --check --strict -- Extract the tarball and run the
onslaught-celauncher. - The tarball bundles dxvk-native, SDL3, libxkbcommon and the FFmpeg shared libraries.
- It needs glibc 2.29 or newer (
ldd --versionshows yours) and a 32-bit Vulkan 1.3 driver that offers what its graphics layer (dxvk 3.1) requires: among other extensionsVK_KHR_load_store_op_none,VK_KHR_maintenance5andVK_KHR_maintenance6. It also requires 256 bytes of push constants when DXVK's descriptor-heap path is not enabled; extension presence alone does not establish that path is usable. On older distributions the graphics driver, not glibc, is what stops it. Found on test systems: the Mesa drivers of Ubuntu 22.04 (23.2) and Debian 12 (22.3) do not have those extensions (Debian 12 has Mesa 25.0 inbookworm-backports), and Fedora 40's Intel driver (Mesa 24.1) offers only 128 bytes of push constants and is refused, while its software driver (lavapipe, the same Mesa) is accepted. AMD (RADV) and NVIDIA drivers have not been tried on those distributions. The preflight check below says when your glibc is too old or your 32-bit driver lacks the Vulkan version or those extensions (it cannot see the push-constant size). - Your system must provide these 32-bit libraries:
- glibc, libgcc and libstdc++
- zlib
- the Vulkan loader and a 32-bit Vulkan driver (above)
- the X11 or Wayland client libraries; libXrandr (X11) and libdecor (Wayland) are optional: the preflight only notes a missing one (SDL works without libXrandr, with fewer display features; without libdecor the windows have no title bar on some desktops)
zenity(any architecture), which shows the launcher's questions (the update offer, the game folder, session recording); without it the launcher uses SDL's own dialog, or asks on the terminal if no dialog workscurl(any architecture), which the launcher runs to check for and download updates; without it no update is found and the game still starts
- A preflight check lists any missing 32-bit system libraries, with their pacman and apt package names. Set
BEA_SKIP_PREFLIGHT=1to start without it.
The 32-bit libraries by distribution family (plus your GPU's 32-bit Vulkan driver):
-
Arch and derivatives (enable the
multilibrepository in/etc/pacman.conffirst; tested):sudo pacman -S --needed lib32-glibc lib32-gcc-libs lib32-zlib lib32-vulkan-icd-loader lib32-libx11 lib32-libxext lib32-libxrandr lib32-wayland zenity sudo pacman -S --needed lib32-vulkan-radeon # or lib32-vulkan-intel, or lib32-nvidia-utils -
Debian and Ubuntu (Ubuntu 24.04, or Debian 12 with Mesa from backports:
sudo apt install -t bookworm-backports mesa-vulkan-drivers:i386; the Mesa of Ubuntu 22.04 and stock Debian 12 is too old):sudo dpkg --add-architecture i386 && sudo apt update sudo apt install libc6:i386 libstdc++6:i386 libgcc-s1:i386 zlib1g:i386 libvulkan1:i386 libx11-6:i386 libxext6:i386 \ libxrandr2:i386 libwayland-client0:i386 libwayland-cursor0:i386 zenity mesa-vulkan-drivers:i386 # NVIDIA: the driver's i386 libraries
-
Fedora (Fedora 40's Intel driver, Mesa 24.1, is refused for its push-constant size; other Fedora releases and drivers have not been tried):
sudo dnf install glibc.i686 libstdc++.i686 libgcc.i686 zlib-ng-compat.i686 vulkan-loader.i686 libX11.i686 libXext.i686 \ libXrandr.i686 libwayland-client.i686 libwayland-cursor.i686 zenity mesa-vulkan-drivers.i686 # NVIDIA: the driver's i686 libraries -
Steam Deck and SteamOS (untested): add
onslaught-ceto Steam as a non-Steam game and set its compatibility tool to "Steam Linux Runtime 3.0 (sniper)"; that container supplies the 32-bit libraries and the Deck's driver. The game ran in that container on a desktop PC, started directly from the container's own launch script. Starting it as a Steam shortcut with that compatibility tool has not been tried, on a Deck or anywhere else.
The Windows build has been checked under Wine on Linux and on a Windows 11 virtual machine using Microsoft's software renderer. It has not yet been tested on a Windows PC with a real graphics card and its driver. Please report any problems; see Known limitations and the release notes for the routes checked.
- Extract the zip and run the
onslaught-ce.exelauncher. The zip also containsbea.exeand the SDL3, FFmpeg and zlib DLLs. - You need Windows 10 or newer, for its built-in UCRT. User and game folders whose names have characters outside your Windows language's character set work from Windows 10 version 1903 on (the UTF-8 setting the programs use is ignored by earlier versions).
- The executable is unsigned, so SmartScreen may show a warning. Choose More info, then Run anyway.
- Update: from 0.1.8 on, the launcher updates itself (Updates and privacy). From 0.1.0–0.1.7, install the latest release by hand once (Getting the latest version); never start an old launcher to reach its updater.
- Move: the program folder can live anywhere; move it as a whole (with its
versionsfolder) while the game is closed. The launcher remembers your game folder ince.ini(gamedir); if the game moves, it logs why the remembered folder no longer works and searches again, or setBEA_GAME_DIRto the new folder. - Uninstall: first make and verify a recovery copy of the user folder, including any custom
BEA_USER_DIR. It may be inside a program folder if you chose that location. Then delete the program folder. Before deleting an old 0.1.0–0.1.6 folder, look at any neighboring.old-*,.download-*and.unpack-*folders yourself: they may hold things of yours; never use the old launcher's cleanup.
The detailed version of Getting the latest version, for unusual setups.
- Close CE and its launcher. Do not run the affected version again. Do not rename or delete its program folder
or any neighboring
<program folder>.old-*,.download-*or.unpack-*paths. They may contain unrelated files or the only remaining copy of your data. - Locate both launcher and game user-data folders without starting the launcher.
BEA_USER_DIRtakes priority; otherwise the default is$XDG_DATA_HOME/onslaught-ceon Linux (~/.local/share/onslaught-cewhen unset), or%APPDATA%\Onslaught CEon Windows. A relativeBEA_USER_DIRcan put launcher files and game user data in different locations. For example, the 0.1.6 Linux source indicates that a launch from a folder withBEA_USER_DIR=userwould resolve launcher files inuserthere and game user data underuser/user; Windows behavior has not been verified. Identify the actual locations from the old launch working directory and saved files; do not assume they are the same. - Copy each whole data folder to an independent backup outside the original game and all CE program and staging
folders. Verify the copies and identify the locations containing your careers (
savegames), settings (ce.ini) and recordings when present. Keep all originals and backups; if locations or conflicting files are unclear, do not merge or overwrite them, and seek help before choosing a working folder. - Choose the user folder the new version will use. If your data is in the default folder above (no
BEA_USER_DIR) and step 3's backup is verified, the new version can use that folder as it is: leaveBEA_USER_DIRunset. Otherwise (a custom or relativeBEA_USER_DIR, or locations you are unsure of), prepare a separate working copy of the identified game user-data folder outside the original game and all old CE program and staging folders, and setBEA_USER_DIRto its absolute path for the successor. Preserve any separately located launcher settings and logs as well; do not assume copying the game folder restores them. Do not put saves into the new program folder. - Download the latest platform package and
ASSETS.txtfrom that specific release, and verify the package. Do not use 0.1.6 as an intermediate upgrade, and do not use an old launcher's automatic update path. - Extract the successor into a new, empty folder writable by your account, with no directory links/junctions in its path, separate from the original game and all old CE folders. Do not merge old executables or DLLs into it.
- Run only the successor's
onslaught-ce(Linux) oronslaught-ce.exe(Windows), using the same account and the user-folder choice from step 4. Check Onslaught CE > About, careers and settings, then update your shortcut. Keep your backup and uncertain old/staging paths. No administrator execution or disabled UAC is required.
Windows 0.1.5 also has a separate update-helper startup problem. The same manual procedure avoids invoking that old helper. The embedded execution-level declaration in 0.1.6 does not fix the cleanup hazard above.
This source's launcher (from 0.1.8) checks for updates when it starts: it downloads the public files
ce-update-v2.json and its signature from the latest GitHub release, checks the signature against the key built into
the launcher, and asks before installing. Update downloads the package, checks its size and SHA-256 against the
signed feed, and unpacks it into versions/ inside the Onslaught CE folder; that folder's own files and everything
beside it are left alone, and the version you had stays for --rollback. Careers and settings are not changed.
--update-only checks now without starting the game; BEA_NO_UPDATE_CHECK=1, update_check=0 in ce.ini or
--no-update-check turn checking off; Onslaught CE > Help & Info > Updates & Rollback in the game says whether update_check in ce.ini has turned checking off, and where
ce.ini is.
On Linux the launcher downloads with the system curl (https only); without curl the check finds nothing and says so
only in the log. Releases never carry the old latest.json feed that launchers 0.1.0–0.1.6 fetch, and the legacy
--apply command is refused.
Going back: if an update gives you trouble, close the game and run the launcher in the Onslaught CE folder with
--rollback: ./onslaught-ce --rollback (Linux), or onslaught-ce.exe --rollback from a Command Prompt in that folder
(Windows). The version before the update becomes the active one again, and that update is not offered again; a newer
one will be.
There is no telemetry. Report a Problem is a user-initiated action: it opens a GitHub page in your browser with your version and OS in its address; nothing is posted until you submit it.
Onslaught CE starts at your desktop's resolution, and Video Options lists your monitor's sizes, widescreen ones
included. On a widescreen monitor the 3D view shows more to the sides (the original's vertical view is kept); the menus,
loading pictures and films keep their original 4:3 shape, centred with black bars. To get the original's 4:3-only list
and 640 x 480 start back, set BEA_PORT_WIDESCREEN=0. The pause menu, the message and briefing logs and the end-of-level menus read the mouse inside that
centred picture too, so the pointer and the items under it agree at any window size, and a click acts on the item it was made on even when the pointer had not moved first.
In eligible ordinary single-player play with widescreen modes enabled, the HUD (radar, portrait, messages, compass
and reticle) scales up when the screen is wider than 640 and taller than 480 pixels, to make it easier to read.
Set BEA_PORT_HUD_SCALE=0 for the original's fixed-size HUD. Scaling is off in recordings and replays,
multiplayer, and when BEA_PORT_WIDESCREEN=0.
In the same play the HUD's corner groups (the target panel, objectives, radar, weapon and ammunition readouts and the
radio portrait) sit in the corners of the screen, where the original's HUD sits at 4:3, while the radio messages,
warnings, compass and reticle stay in the middle. On a very wide screen the corners are far apart: put hud_anchor=0
in ce.ini to keep them in the columns a 4:3 picture would have, as BEA_PORT_HUD_SCALE=0 does. In multiplayer the HUD
stays in the 4:3 columns.
Sharper text is off by default: the menus' and HUD's text keeps the original's soft look, as the rest of the picture
does. Put sharp_ui=1 in ce.ini to turn it on: with widescreen modes enabled on a non-4:3 picture, bitmap text
drawn at least twice its original size horizontally or vertically (for example, menu text at 1920 x 1080) can use a
sharper copy of the game's letters, so it can look crisp instead of soft; the letters keep their shapes, sizes and
places. The text is then deliberately sharper than the original's soft pixels and looks brighter. A font's sharper copy
is made the first time it is used, which can pause the game for a moment (about a tenth of a second). In ordinary use
it does not apply in recordings and replays, on 4:3 screens or when BEA_PORT_WIDESCREEN=0.
For testers: to try a screen size your monitor does not offer, set BEA_PORT_WIDE_TEST=WIDTHxHEIGHT and start with
the same size, for example BEA_PORT_WIDE_TEST=2560x1440 onslaught-ce -- -res 2560 1440. The game then treats it as
an available widescreen mode. A valid test switch forces widescreen modes on even during recording or replay and when
BEA_PORT_WIDESCREEN=0; unset it before making a faithful reference tape.
In ordinary use, replays and recordings use the original 4:3 behaviour. The original game shares one random number source between visual effects and play, so a wider view can change the details of a fight; that is expected.
Onslaught CE can read replacement game files, such as textures, from mods on Linux. This is an early test of the
feature: a mod can replace files the game already has and supply a level's world file (below), and there is no mod menu
yet. Mods are disabled on Windows until path handling is safe and tested there: on Windows a mods= line in ce.ini is
ignored, and the log says so.
- A mod is a folder in the
modsfolder of your user folder:~/.local/share/onslaught-ce/mods/<id>on Linux. It holds amod.jsonand the replacement files at the paths the game uses, for exampledata/resources/dxtntextures/meshtex%BE_texA.tga(0)A1R5G5B5.aya. - With the game closed, back up
ce.iniand add one line naming the mods in order:mods=first-mod,second-mod. When two mods replace the same file, the later one wins. Remove an id (or the line) to turn a mod off. - Nothing in the game folder or in a mod's folder is ever changed. A file you put in your user folder yourself still wins over a mod.
- Every file is checked when the game starts:
mod.jsonmust list it with its size and SHA-256, it must be inside the mod's folder (no links), and it must replace a file the game has (or be a world file, below). A mod with any problem is not loaded at all, and the log says why. The log also names each active mod and every file it replaces or adds, and notes the first time the game reads each one. - A mod can also supply a level's world:
data/worlds/world100.wrd(three digits, the level number) listed like any other file. The game then reads that world body instead of the one inside the level's archive. A level's own world and its base world are separate files (world001.wrdis the base world of level 100), and a mod may supply either or both. Careers remember which buildings of a base world are still standing, so edit a base world by adding things at the end, not by moving or removing the ones it has. If a world file changes after the game has started (an editor saving it, say), the game loads that level's own world instead, and the log says so. - A mod's files are read by the game itself. The checks above cover where a file is and what it contains at the byte level, not what a texture, archive or world inside it does, so install mods only from people you trust.
- Mods are always off whenever a run is meant to be reproducible or shared, so those stay the same for everyone: replays and recordings (and the developer settings behind them: a deterministic clock, input tapes, probes, pilots and autopilot) and network play (host, join or handoff). A test that should load a mod must run live on the real clock.
mod.json looks like this (id is the folder's name; optional ce_min and ce_max, such as "0.2", limit
the Onslaught CE versions it loads in):
{"schema": 1, "id": "red-aquila", "name": "Red Aquila", "version": "1.0", "author": "you",
"description": "A red battle engine.",
"files": [{"path": "data/resources/dxtntextures/meshtex%BE_texA.tga(0)A1R5G5B5.aya",
"size": 146214, "sha256": "<64 hexadecimal digits>"}]}port/tools/mods.py in the source writes a new mod.json for a mod folder (manifest) and packs and unpacks the
game's .aya files (pack, unpack); outputs must be new names outside the selected game folder. Set --game when
using a non-default game folder. The tool cannot enable mods or edit ce.ini. These output operations currently need
Linux directory handles, reject links and conservatively refuse alternate mounts of the game's filesystem; an
interrupted write may leave an incomplete new file. A texture .aya holds a DDS image.
A texture may be larger than the original (twice
the size has been tested), but its unpacked file must stay under 5 MiB, the game's limit for one texture.
- In 0.1.7 or later, choose Onslaught CE > Report a Problem in the main menu, or run
onslaught-ce --report(Windows:onslaught-ce.exe --report, from a Command Prompt in the program folder or a shortcut with--reportadded). Do not start a 0.1.0–0.1.6 launcher to report a problem, by either route; use the Issues page instead and give the version you downloaded. Report a Problem opens a new issue on this repository in your browser, already filled in with your version and system (which GitHub sees in the page's address), and prints the folder that holds your log. Nothing is posted until you submit the issue. You can also open an issue on the Issues page yourself. - Say what happened and how to make it happen again.
- Attach
onslaught-ce.logfrom your user folder ($XDG_DATA_HOME/onslaught-ce(whenXDG_DATA_HOMEis set and nonempty; otherwise~/.local/share/onslaught-ce) on Linux,%APPDATA%\Onslaught CEon Windows). In ordinary, unrecorded play it includes the launcher and game identities, the game executable's SHA-256, graphics and audio configuration, every display (size, refresh rate, scaling, which one the game used), the keyboards, mice, controllers and audio playback devices by the names your system gives them, the Onslaught CE settings in use, level and player-mode changes, window focus changes, music/film requests and results, and counted audio submission errors. Events carry elapsed milliseconds and a Present number. These details help distinguish a mixed installation, a device failure and the order of playback requests; successful requests do not prove what reached your speakers. Screenshots and recordings are still useful.onslaught-ce.old.logis the run before. Each stops at 4 MB, and repeated diagnostic events have their own limits. Home paths and account-name path components are shortened; look the file over before sharing it. It needs no administrator access, records no microphone audio and is never uploaded automatically. You can also share the file directly with someone helping you. Replays and session recordings omit the detailed ordinary-play events. - If you recorded the session (below), attach its tape too: it can help us reproduce what happened.
If you set BEA_USER_DIR to a folder, look for the log in that folder instead. Logs can include local paths,
user names
and device details; review them before sharing publicly, while keeping the details needed to diagnose the
problem.
The goal is a game that behaves exactly like the original. We check that by replaying recorded input in both and comparing them, and recordings of real play find differences our own test runs miss.
- Record one session with
onslaught-ce --record, or every session with Onslaught CE > CE Settings > Record Play for Bug Reports in the main menu. That starts the next time you launch Onslaught CE (quit the game, then start it again); it putsrecord_sessions=1ince.iniin your user folder. While it is on, each start asks whether to record: Stop recording there (or starting withonslaught-ce --no-record) turns it off again. - By default, recording targets 30 frames a second for play and uses the replay clock. Its menus take the keyboard and mouse, and you can type a career's name. Direct gamepad and flight-stick input is disabled during recording and replay because the tape does not record it; use the keyboard and mouse. An older tape made with live controller input cannot recover that input and may replay differently. The screen is normally the original 4:3 (no widescreen), and the menus are the original's: the version text, no Onslaught CE menu and no Cheats page, and only cheats typed into a career's name work. These Onslaught CE additions are off too: the larger HUD, the command panel, the tutorial's dodge and zoom cues, and the saved Display mode (Windowed or Fullscreen) from Video Options. By default the game tries to play sound through the audio monitor when a device is available. The dodging instructions above remain available in this guide.
- Each completed session is saved in the
tapesfolder of your user folder asYYYYMMDD-HHMMSS-PID-SERIAL.tapeand a.tape.jsonbeside it. The final tape appears when the recording closes successfully. A failed or interrupted capture may leave an.incompletefile; it is not a completed recording. Keep it for diagnosis rather than replaying it. The launcher reports that the recording failed. Earlier recordings are never replaced. The tape records key presses and releases, typed text, mouse movement and buttons, their frame numbers, and the game's rendering size for menu mouse input. The.jsonincludes the CE version and build, platform and OS, date and time, clock, frame rate and audio-monitor setting, game arguments, and encoded copies of some files in your CE user folder at the start. These can include game options, saved careers and other files in that folder. Session recording does not capture video, game audio or microphone audio. Both files can contain personal information; review them before sharing. - To share a session, put the
.tapeand its.tape.jsonin a zip and attach it to an issue, saying what to look at (what differed from the original, and roughly when). Sessions where something looked or behaved differently from the original help most.
The port is compared with the original game using recorded replays under a virtual clock. Selected state fields are checked at specified frames, often every 50 frames on standard levels and every frame on selected recorded sessions. Some original-game references also synchronize music or voice loading for the comparison.
Standard test levels (an earlier 0.1.5 candidate). The available sampled state agreed with the retained original-game references for levels 100, 200, 400, 521 and 611 through 10,000 frames, and level 860 through 3,250 frames. Missing player state after death is unavailable evidence, not a match. Beyond frame 3,250, level 860's original-game recordings disagreed with each other. The earlier level-200 health and level-860 energy differences were corrected in that candidate; this does not prove all gameplay, pictures or sound are identical. Later development comparisons use additional references and cover more frames; the release notes describe the checks for each published version.
Historical 60-level sweep. This sweep played the first ~3,000 frames (about 1 min 40 s) of 60 levels with one generic input recording. 30 of those levels have original-game recordings to compare against:
- 20 matched the recorded fields at the sampled frames.
- 2 had small differences at the time: levels 322 and 431.
- 8 have original-game recordings that disagree with each other, so they can't decide a match.
Those 30 levels were replayed again on the 0.1 build itself; the sweep is not a claim about later releases. Replays run in faithful mode (4:3, no CE menus or cheat switches).
Earlier interactive check: the front end, creating, loading and saving careers, options, videos and the tutorial through its third zone. Complete tutorial parity with the original remains open.
Recorded session check: Onslaught CE 0.1.9 for Linux replayed a player-recorded Level 100 tutorial session through its win and debrief. This covers one recorded route; it does not establish complete parity with the original.
-
Released launchers 0.1.0–0.1.6 contain the startup cleanup hazard; do not run them. Install the latest release by hand once (Getting the latest version). Windows 0.1.5 also has an update-helper startup failure. Neither disabling updates nor installing 0.1.6 solves the cleanup risk.
-
Windows checks cover Wine and one Windows 11 virtual machine using Microsoft's software renderer, not a PC with a real graphics card. The release notes describe the routes tested for each version and its known limitations. Ordinary play does not hang at the idle title screen when films are disabled (fixed in 0.1.4); faithful replay retains retail behavior there. A default-fullscreen mouse hit-area mismatch and a recovery problem after minimize/focus changes, both reproduced in the Windows 11 virtual machine, are corrected (0.1.5). The player's AMD graphics setup remains untested. Please report problems with the log.
-
The Windows executable is unsigned, so SmartScreen may warn you (see above).
-
On Linux you need glibc 2.29 or newer and a 32-bit Vulkan 1.3 graphics driver with dxvk's required extensions (see Linux above). It was run in Ubuntu 24.04 and Debian 12 (with backported Mesa) file systems and in the Steam Linux Runtime 3.0 container, all with test drivers and no window; nobody has played it on those systems or on a Steam Deck, and the Steam shortcut route for the Deck (above) has not been tried. Those runs used a 0.1.3 candidate build, not the released packages. An asset-decompression buffer overrun and an audio-file cleanup defect reproduced in a Fedora 40 file system with the software driver (lavapipe) are corrected (0.1.5). Bounded level-entry and shutdown checks pass there; this is not a full-playthrough or hardware-driver validation.
-
One effect depends on leftover memory rather than on the game: a walking unit's foot-landing flags are never given a starting value by the original game's code, so whether its first landing makes a stomp explosion depends on what that memory held before. This can differ between builds and between machines: level 521's replay shuts down one more explosion on 0.1.3 than on 0.1.2, and nothing else the replay compares (positions, health, random numbers, scores) differs. A recording that reaches such a landing may play back slightly differently on another version or machine.
-
Recording and replay were compared using an isolated native PipeWire null sink as well as silent audio; the tested tape, mixed audio and saved bytes agree. Ordinary-clock music transitions and clean shutdown were also exercised. These checks do not validate a physical audio device, listening quality or every race schedule. Music starts that could survive a stop request are corrected (0.1.5). Menu music that played twice, reported on Windows after a sound option (quality, hardware sound, device or 3D sound) had been changed, is corrected (0.1.12).
-
Complete tutorial parity with the original has not yet been established.
-
Gamepad and flight-stick defaults cover menus, solo play and bonus co-op (how); only virtual devices have been tested so far.
-
Widescreen play is not compared with the original (the original has no widescreen); ordinary replays and recordings use 4:3.
-
Planned, not in this version yet: Internet multiplayer, mods on Windows and additional HUD options. On Linux, mods are an early test (Mods (experimental)).
-
On Windows in 0.1.12, the pause-menu pointer can select the wrong item at some display sizes, and the system cursor may remain visible in fullscreen. Changes are in development; further testing on physical Windows hardware is needed. If you encounter this, include your display settings and log in your report.
-
Reports of layered or stuttering music and map-edge artifacts still need retesting on the affected Windows hardware. An AMD-specific cause has not been confirmed.
The build runs on Linux (x86-64) and makes both programs from a Git checkout of this repository. It needs Python 3,
Git, Ninja and the usual build tools, and your installed game (the build checks the few game files it compiles in by
their hashes, config/game-data.sha256; set BEA_GAME_DIR if the game is not in Steam's default folder).
python3 port/tools/deps.py build # the pinned toolchains, libraries and Linux sysroot, checked by SHA-256
python3 port/build.py --public --target linux --ce-version dev
python3 port/build.py --public --target windows --ce-version dev--ce-version sets the version the menu and --version show; without it the build calls itself
"vdev". It also sets the Windows launcher's file and product version strings. Their numeric fields use one to four
release-number parts, each from 0 to 65535; -prerelease and +build suffixes stay in the strings. Named development
builds such as dev use numeric 0.0.0.0. The game's bea.exe keeps its separate retail 1.0.0.0 resource.
python3 port/tools/build_tests.py checks launcher version parsing and resource linking without building the game.
After completing the Linux build, python3 port/tools/audio_eof_tests.py checks the actual Ogg reader and music
worker with generated audio and controlled buffer endpoints. It also needs a host ffmpeg command with the
libvorbis encoder; the pinned decoder-only FFmpeg libraries do not provide that command. This check does not
launch the game or open an audio device.
port/deps.lockpins every downloaded input by URL and SHA-256.- One input comes prebuilt: libvorbis, built with the game's original compiler. It is fetched from this repository's release assets, with its source and build script.
port/README.mddescribes the build in detail: the compiler flags, the platform layer and the patches the port applies tosrc/.
Onslaught CE is licensed under GPL-3.0-only (see COPYING, NOTICE and REUSE.toml). The upstream Onslaught source ships the GPLv3 text without a separate “or later” grant; we treat it, and license our work, as GPL-3.0-only. Third-party components keep their own licences; see THIRD-PARTY.md. The FFmpeg libraries ship as replaceable shared libraries, and their source tarball is attached to each release.
The public graphics host is the GPL-3.0-only implementation in port/platform/public/d3dapp.cpp and .h.
The inherited SDK sample framework is excluded from this source tree and from the public build.
The game's data is not part of this project and is not covered by its licence.
See CONTRIBUTING.md (contributions are GPL-3.0-only; never include game files) and SECURITY.md (report problems privately).
- Lost Toys, for the original game
- Stuart Gillam (desimbr on Discord), for his help, insight and guidance
- Jeppi and BermudaMaster on Discord, and every other early tester, for testing and helpful reports
- The Onslaught CE contributors, including everyone who contributed work made with their own AI coding agents
- The Battle Engine Aquila community and preservation projects, including everyone testing, reporting issues and sharing fixes
The Onslaught CE → Special Thanks menu carries these acknowledgements in the game. The original game's Credits remain separate.
- onslaught-decomp: the byte-matching decompilation of the game's PC code, and the tools that judge the match.
- onslaught-godot: a rebuild of the game in Godot (a proof of concept).
- onslaught-preservation: documentation of the game, its formats, behaviours and history.
- Onslaught-Career-Editor: companion app for saves, settings and lore; to be renamed onslaught-companion.
- stuart73/Onslaught: upstream GPL source for the game.