OpenTS vs. vanilla Tiberian Sun

github.com/OpenTS-Developers/OpenTS · read 12 Sep 2026

OpenTS is a standalone rebuild of the Tiberian Sun 2.03 Firestorm engine — not a patcher like Vinifera, and not a remake. You still install the retail game from the Ultimate Collection; OpenTS replaces Game.exe. Windows only (10 1903+), 32- and 64-bit builds, GPLv3, driven mostly by ZivDero with about nine contributors.

508stars
~390commits since Jun 2026
217documented changes
1release (0.1.0, Aug 2026)

Every change carries a change record in manual/changes/: 80 features/perf/balance entries and 130 bug fixes so far. 0.1.0 is released; the ~130 changes tagged 0.2.0 are in nightlies only.

The big ones

Rendering: bgfx instead of DirectDraw

The frame still renders in software — looks and plays identically — but reaches the screen through Direct3D, Vulkan or OpenGL. Every resolution the display reports from 640×400 up to 4K, ultrawide included. Fullscreen is a borderless window that never changes desktop resolution, so alt-tabbing and crashes no longer wreck your desktop. Real system mouse cursor. AllowHiResModes, AllowModeToggle and the -16 switch are gone.

New audio engine

A custom mixer on miniaudio replaces the DirectSound buffers and timer thread. Sixteen simultaneous sound effects instead of five, sound effects positioned in the view, queued EVA speech instead of dropped lines, music pauses on focus loss, and unplugging headphones no longer kills all audio — playback follows the device. Sound definitions now understand the Yuri's Revenge SOUND.INI keys (multi-sample sections, attack/decay, random pitch and volume, per-section limits).

Networking that actually works

LAN play moved off IPX (which modern Windows dropped, so it was simply broken) onto UDP, with broadcast discovery on every adapter. Adaptive timing per connection, malformed packets rejected, an explicit disconnect/reconnect policy, and real out-of-sync recovery: instead of a box whose "Continue" dropped everybody, the host loads one of the match's multiplayer saves and plays on, dropping only the machines whose checksum disagreed. OOS reports are written to disk. Westwood Online and modem/null-modem play are retired.

CnCNet support (current milestone)

-SPAWN with a SPAWN.INI now runs the whole match — skirmish, campaign, tunnel or direct multiplayer, resumed saves — with client-supplied load screen, score-screen skip, house alliances and AI base plans read from the spawn sections. Plus observer seats and coach mode, team/observer-scoped chat, chat echo with a readable background, and multiplayer movies with a vote to skip.

Quality of life

Modding / rules

~130 bug fixes

A lot of it is vanilla's hard-coded "first entry in the list" assumptions being replaced by whole-list lookups — construction yards, refineries, harvesters, war factories, service depot pricing — which is what makes mods with more than one of a thing behave. Plus malformed INI handling, large-map zone ids, damaged-scenario rejection, Firestorm detection, tiberium growth, fog redraw bounds, and campaign intro movies.

Red Alert 2?

No RA2 work yet, and it's not next. The README lists three milestones in order: (1) CnCNet and client support — the current focus, most of 0.2.0; (2) feature parity with Vinifera and the rest of ts-patches; (3) then extending TS toward RA2/Yuri's Revenge parity and matching the popular YR engine extensions.

Nothing in the repo is RA2 engine work: no issues or PRs about it, and the only RA2 mentions outside the README roadmap are in docs/RATIONALE.md, about naming — the language-resource names come from RA2, and a future RA2 decompilation is noted as possible future evidence for naming things. So it's a stated long-term direction, not code.

What has landed are RA2-flavoured features backported into TS: vehicle transports, Yuri's Revenge SOUND.INI semantics, cash-producing structures (oil derricks), 32/64-facing artwork, MultiMCV, build-off-ally. Also worth knowing: the architecture note (docs/DIRECTION.md) says the engine is migrating incrementally toward entity-component, explicitly with no full rewrite — which is what would eventually make RA2-scale extension practical.

Sources: README.md, docs/DIRECTION.md, docs/RATIONALE.md, the 217 records in manual/changes/, the GitHub API (issues, PRs, releases, contributors).