Skip to content

Releases

Dark Oberon 0.6.0

Choose a tag to compare

@jakubfrieb jakubfrieb released this 05 Nov 15:33

A product page for the game, and the lobby now links to it and shows the version it runs. The game itself is the same as in 0.5.1.

Downloads

System Package Needs
Windows 10 / 11 dark-oberon-0.6.0-win64.zip nothing, unzip and run dark-oberon.exe
Linux (glibc 2.34+) dark-oberon-0.6.0-linux-x86_64.tar.gz sudo apt install libsdl2-2.0-0 libsdl2-mixer-2.0-0 libglu1-mesa (or your distro's sdl2 sdl2_mixer glu)
Haiku R1/beta6 dark-oberon-0.6.0-haiku-x86_64.zip pkgman install libsdl2 sdl2_mixer glu

Unpack anywhere and start the game from its folder. Each package has a short README with details.
All players of one network game need the same version.

Changes in 0.6.0

Added

  • Product page for the game at https://oberon.cloud.digitalmind.cz (Czech at /, English at /en/),
    styled after the game's main menu: what the fork adds, downloads for Linux, Windows and Haiku from the
    newest GitHub release, a link to the Oberon Cloud lobby with the number of games running, and the
    original authors. Source and deploy steps in deploy/srv_dark-oberon/ (DigiCloud stack, Python
    standard library only). The game is unchanged.
  • The lobby links to the game's download page and shows the version it runs. The version comes from the
    VERSION file at build time; GAME_VERSION in server/.env overrides it and DOWNLOAD_URL changes the
    link.

Dark Oberon 0.5.1

Choose a tag to compare

@jakubfrieb jakubfrieb released this 25 Sep 12:09

Crash fixes: no more crashes a few minutes into a game with many workers cutting wood, and none when a game ends.

Downloads

System Package Needs
Windows 10 / 11 dark-oberon-0.5.1-win64.zip nothing, unzip and run dark-oberon.exe
Linux (glibc 2.34+) dark-oberon-0.5.1-linux-x86_64.tar.gz sudo apt install libsdl2-2.0-0 libsdl2-mixer-2.0-0 libglu1-mesa (or your distro's sdl2 sdl2_mixer glu)
Haiku R1/beta6 dark-oberon-0.5.1-haiku-x86_64.zip pkgman install libsdl2 sdl2_mixer glu

Unpack anywhere and start the game from its folder. Each package has a short README with details.
All players of one network game need the same version.

Changes in 0.5.1

Fixed

  • Crashes (use after free) a few minutes into a game, most often with many workers cutting wood, seen
    on Haiku in the renderer (TSOURCE_UNIT::TestVisibility, TMAP_UNIT::DrawToRadar) and in the CPU AI
    (TAI_GAME_STATE::ScanFromPlayer). A unit marked for deletion (e.g. a tree that was cut down) was
    freed by whoever released the last counted pointer to it, which could be a path finding thread,
    while the game thread and the renderer were still walking the unit lists; the pointer counter itself
    was a plain int changed from several threads. Units are now only queued there and deleted by the
    game thread between steps (and when a game stops), the counter is atomic, and exactly one caller
    takes over the deletion. The queue is checked without any locking when it is empty (the usual case),
    so the game thread does not wait for the renderer every step. On Linux it usually went unnoticed
    because the freed memory stays readable.
  • Use after free when a game ends (found with AddressSanitizer): the map fields' aimer/watcher lists
    released their counted pointers after the players and their units had already been deleted. They
    are now released first.
  • Haiku: the game could abort at start in Mesa ("Mesa cache keys mismatch!") after an earlier crash had
    left llvmpipe's on-disk shader cache inconsistent. The game now starts with the shader cache off
    (MESA_SHADER_CACHE_DISABLE, can still be overridden).
  • The git revision next to the version in the menu now follows new commits; before, build_info.h
    was only regenerated when VERSION or the Makefile changed, so packages could show an older hash.
    Builds without git (release containers, Docker) keep the existing stamp.

Dark Oberon 0.5.0

Choose a tag to compare

@jakubfrieb jakubfrieb released this 25 Sep 10:09

Smarter CPU soldiers, a god mode for watching the AI, and a performance test for big battles.

Downloads

System Package Needs
Windows 10 / 11 dark-oberon-0.5.0-win64.zip nothing, unzip and run dark-oberon.exe
Linux (glibc 2.34+) dark-oberon-0.5.0-linux-x86_64.tar.gz sudo apt install libsdl2-2.0-0 libsdl2-mixer-2.0-0 libglu1-mesa (or your distro's sdl2 sdl2_mixer glu)
Haiku R1/beta6 dark-oberon-0.5.0-haiku-x86_64.zip pkgman install libsdl2 sdl2_mixer glu

Unpack anywhere and start the game from its folder. Each package has a short README with details.
All players of one network game need the same version.

Changes in 0.5.0

Added

  • Dev console god: your units take no damage; god all makes every player's units invulnerable (map
    objects such as trees and mines are not affected); god off turns it off. Local games only, like the
    other dev commands.
  • Performance test tests/cpp/perf_smoke.sh [units] [seconds] [warmup] [map]: a headless server with CPU
    players places the units around the bases, sends them all to the middle of the map and measures the
    battle: simulation step time (events and AI; avg, p50, p95, p99, max, share over the 20 ms budget),
    path search jobs in the thread pool and the length of their queue. Optional limits
    PERF_MAX_STEP_P99_MS and PERF_MAX_PATH_QUEUE make it fail. New server commands behind it:
    spawn <n> [fight] and perf [reset]; statistics in src/doperf.* (tested in make test-ai).

Changed

  • Path finding uses one thread per CPU core minus one (at least the original 5, at most 8) instead of
    always 5; the A* jobs do not take the simulation lock. With 1200 fighting units 8 threads halve the
    queue of waiting path searches; more threads made each search and the simulation step slower.
    DO_PATH_THREADS=<n> overrides the count.

Fixed

  • A CPU soldier that got ahead of its army kept walking to a building and hitting it while a player
    was attacking it: attack and retreat decisions only looked at the army as a whole, and the army order
    kept re-sending the unit at its target. Each army unit now reacts on its own: it turns on the enemy
    attacking it, or falls back to the rally point when it is outnumbered where it stands
    (TAI_UnitReaction, personality retreat_ratio).
  • CPU scouts walked into the enemy base and kept hitting the first building they reached, even while
    being attacked, because scouts are left out of defense and the army. Scouts now ignore enemies, run
    home as soon as they are hit or targeted, and keep away from that base for 60 s.

Dark Oberon 0.4.1

Choose a tag to compare

@jakubfrieb jakubfrieb released this 24 Sep 23:51

Steadier internet games: keepalive on game connections, clear logs when a player drops out, and a sturdier lobby.

Server admins: after updating, run server/up-server (it now starts the lobby in the background and only follows the logs; Ctrl+C no longer stops running games). Rebuilding the container still ends running games, so update when nobody is playing.

Downloads

System Package Needs
Windows 10 / 11 dark-oberon-0.4.1-win64.zip nothing, unzip and run dark-oberon.exe
Linux (glibc 2.34+) dark-oberon-0.4.1-linux-x86_64.tar.gz sudo apt install libsdl2-2.0-0 libsdl2-mixer-2.0-0 libglu1-mesa (or your distro's sdl2 sdl2_mixer glu)
Haiku R1/beta6 dark-oberon-0.4.1-haiku-x86_64.zip pkgman install libsdl2 sdl2_mixer glu

Unpack anywhere and start the game from its folder. Each package has a short README with details.

Changes in 0.4.1

Changed

  • server/up-server starts the lobby in the background (up -d) and then only follows the logs, so
    Ctrl+C or a closed terminal no longer stops the lobby and the running games. It prints the lobby URL
    from .env (PROJECT_WEBSITE), and --no-logs returns right after the start.

Added

  • Game connections use TCP keepalive (30 s idle, then 6 probes 10 s apart where the system allows it,
    the system default on Windows), so NATs and firewalls keep quiet connections open and a dead peer is
    detected in about a minute.
  • Connection logging on the game server at Info/Warning level: every connection, clean close, reset,
    a message cut off, and a failed send, with the peer's IP and port and the reason.
  • Lobby log: every game server start, stop (and why: owner, idle, max lifetime, lobby exiting) and any
    unexpected end with its exit code or signal.

Fixed

  • A player whose connection broke with an error (e.g. Connection reset by peer) stayed in the game as
    a ghost: the listener thread returned without reporting the disconnect.
  • Lobby: the thread that reads a game server's log died silently on the first byte that was not valid
    UTF-8 (e.g. a player name with national characters). Nobody drained the pipe afterwards, and after
    about 64 KB of log the game server blocked and the game froze. The log is now decoded leniently and
    read until the server exits.
  • Lobby: when the lobby worker exits, it stops its games and logs it, instead of the games ending
    silently when their stdin closes.
  • README: the Oberon Cloud lobby is at https://oberon-game.cloud.digitalmind.cz.

Dark Oberon 0.4.0

Choose a tag to compare

@jakubfrieb jakubfrieb released this 24 Sep 22:54

Faster building, WASD camera, and a dedicated server that no longer dies from stray connections.

Server admins: update to this version. Older servers crash as soon as anything on the internet (e.g. a port scanner) connects to a game port and sends garbage. All players of one network game need the same version, because the game pace changed.

Downloads

System Package Needs
Windows 10 / 11 dark-oberon-0.4.0-win64.zip nothing, unzip and run dark-oberon.exe
Linux (glibc 2.34+) dark-oberon-0.4.0-linux-x86_64.tar.gz sudo apt install libsdl2-2.0-0 libsdl2-mixer-2.0-0 libglu1-mesa (or your distro's sdl2 sdl2_mixer glu)
Haiku R1/beta6 dark-oberon-0.4.0-haiku-x86_64.zip pkgman install libsdl2 sdl2_mixer glu

Unpack anywhere and start the game from its folder. Each package has a short README with details.

Changes in 0.4.0

Added

  • Map scrolling with W, A, S, D (in addition to the arrow keys).

Changed

  • Faster game pace for all races: construction, upgrades and repairs are 3× faster and factories
    produce units 1.5× faster (src/dopace.h; the .rac files keep the original timings). A peon now
    builds a barracks in about 70 s instead of 200 s. Players of one network game must run the same version.
  • Hotkeys: Stay moved from S to H (hold) and Attack from A to T, because S and A now scroll the map.

Fixed

  • Orcs: the Goblin Workshop and the flying Goblin Zeppelin flickered, because codex had repainted each
    animation frame separately. The zeppelin now changes only at its propeller (the part that moves in the
    original animation); the workshop, which has no wheel like the human Manufactory, stands still. All
    three orc colours. New pipeline script stabilize_frames.py (dark-oberon-dat skill, --freeze for
    groups without a moving part) does this against the human reference race.
  • Dedicated server crashed (terminate called after throwing an instance of 'int') when any TCP
    connection to the game port sent an invalid size byte or closed in the middle of a message, e.g. a
    port scanner on the public internet. Such a connection is now dropped with a warning; the game goes on.

Dark Oberon 0.3.1

Choose a tag to compare

@jakubfrieb jakubfrieb released this 24 Sep 21:41

Dark Oberon now runs on Linux, Windows and Haiku.

Downloads

System Package Needs
Windows 10 / 11 dark-oberon-0.3.1-win64.zip nothing, unzip and run dark-oberon.exe
Linux (glibc 2.34+) dark-oberon-0.3.1-linux-x86_64.tar.gz sudo apt install libsdl2-2.0-0 libsdl2-mixer-2.0-0 libglu1-mesa (or your distro's sdl2 sdl2_mixer glu)
Haiku R1/beta6 dark-oberon-0.3.1-haiku-x86_64.zip pkgman install libsdl2 sdl2_mixer glu

Unpack anywhere and start the game from its folder. Each package has a short README with details.

Changes in 0.3.1

Added

  • Portable Linux release: make linux-dist builds the client in an Ubuntu 22.04 Docker container and packs
    it with the game data into dist/dark-oberon-<version>-linux-x86_64.tar.gz. It needs glibc 2.34 or newer
    (Debian 12, Ubuntu 22.04, Fedora 35 and later) plus SDL2, SDL2_mixer and GLU from the distro.

Fixed

  • The game did not build with SDL2_mixer older than 2.6 (e.g. Ubuntu 22.04): dosound.h forward-declared
    struct Mix_Music, which conflicts with the older typedef struct _Mix_Music Mix_Music.

Changed

  • make dist builds the Windows, Haiku and Linux packages in parallel.
  • make windows-clean removes only the Windows packages from dist/, not the Linux and Haiku ones.

Changes in 0.3.0

Added

  • Windows (x86_64) build, cross-compiled with MinGW-w64: make windows produces
    dist/dark-oberon-<version>-win64.zip (exe, SDL2/SDL2_mixer DLLs, game data). The C/C++ runtime is
    linked statically. One-time setup: sudo scripts/setup-windows-toolchain.sh and
    scripts/fetch-windows-deps.sh.
  • Haiku (x86_64) support: builds natively with the regular make -C src SOUND=1 (needs
    libsdl2_devel sdl2_mixer_devel glu_devel from HaikuDepot/pkgman); sockets link against libnetwork.
    make haiku builds it on a Haiku machine over SSH (HAIKU_HOST, default haiku) and fetches
    dist/dark-oberon-<version>-haiku-x86_64.zip.
  • Lobby accounts: registration and sign-in (name + password, no e-mail). Hosting a game needs an
    account, each account can run one game at a time, and only its owner can start or stop it. Joining
    still needs only the address. Accounts live in SQLite in the lobby-data Docker volume; sign-up and
    sign-in are rate limited per IP, forms and API calls are CSRF-protected.
  • Lobby housekeeping: a game with no human player connected stops after LOBBY_IDLE_MINUTES (30), and
    any game after LOBBY_MAX_GAME_HOURS (8).
  • New lobby settings in server/.env.example: LOBBY_SECRET_KEY, TRUSTED_PROXIES,
    SESSION_COOKIE_SECURE, LOBBY_IDLE_MINUTES, LOBBY_MAX_GAME_HOURS. Lobby tests in tests/lobby.

Changed

  • The lobby web page is restyled after the game's main menu (stone backdrop with the plasticine
    knights, the gold title, black panels, menu-style commands) and works on phones. The manual port
    field is gone; ports are assigned automatically.
  • README: internet play explains accounts, hosting vs. joining and when games stop by themselves.
  • README: the game is documented as running on Linux, Windows and Haiku, with OS badges, a platform table,
    a link to the release zips and build steps for each. The Linux steps now build with sound by default.
  • The top-level make builds the Linux client with sound (SDL2_mixer) by default; make SOUND=0 builds
    without it.

Removed

  • build-classic.sh: it only ran make -C src -j$(nproc), and nothing referred to it.
  • docs/obvious_bugs.md: all its bugs are fixed; the two design notes moved to
    ARCHITECTURE_REFACTOR_PLAN.md.

Fixed

  • Dedicated server: when its stdin closed (the lobby exited or restarted), the server spun at 100 % CPU
    forever instead of quitting, because poll() reported POLLHUP without POLLIN.
  • Windows: crash on startup while listing maps. The _findfirst handle was stored in a 32-bit long,
    which truncates it on Win64 (same bug in race loading). A map file without an extension no longer
    crashes the map list either.
  • Windows: variables named near/far in the CPU player code clashed with windows.h macros.
  • Crash (double free) when leaving a network game, e.g. hosting and then connecting elsewhere: the
    dispatcher thread was joined twice, first by the listener that consumes its queue and then by the
    dispatcher itself. It showed up on Haiku, and on the other systems it was silent undefined behaviour.
  • Config-file parser (dofile.cpp): values from config.cfg, maps, races and schemes were copied into
    fixed-size buffers without a length check. A player name over 20 characters or a map name over 30 could
    overwrite memory. Values are now copied with the buffer size and truncated, with a warning in the log.
    The config file path is no longer limited to 128 characters (deep Windows folders), and two delete
    calls on arrays were corrected to delete[]. Covered by tests/cpp/test_dofile.cpp (built with
    AddressSanitizer, part of make test-ai).
  • tests/cpp/ai_smoke.sh failed to build since 0.2.0 because it did not copy VERSION.
  • The map list no longer relies on dirent::d_type (missing on Haiku) and no longer crashes on a file
    without an extension in maps/.