0.2.9.2 Release Process: Released

Help test release candidates for the next release
Post Reply
User avatar
Z-Man
God & Project Admin
Posts: 11587
Joined: Sun Jan 23, 2005 6:01 pm
Location: Cologne
Contact:

0.2.9.2 Release Process: Released

Post by Z-Man »

Well, it's about time to get the macOS builds into a stable version, so I'm starting the process for 0.2.9.2.

Latest builds:
Release: 0.2.9.2.3

0.2.9.2_rc_z2996
0.2.9.2_beta_z2996
Ready to release: 0.2.9.2.1

You can get it as a direct download or by subscribing to the beta branch on Steam, Itch.io, Zero Install, and now also Flatpak (Linux only). Handy Zero Install command line to download and run the latest version:

Code: Select all

0launch -cr 'https://0install.armagetronad.org/armagetronad-beta.xml'
Apart from the macOS builds, its just small bugfixes and compatibility improvements of the build system, so that for example the Flatpak and debian build definitions need less messy patches.

A significant environment change for Linux users is that since 0.2.9.1, most distributions have migrated from native sdl 1.2 to sdl12-compat, a wrapper around sdl 2.0 providing interfaces compatible with sdl 1.2. You may remember that from a while back when we had to release 0.2.9.1.1 to work around a crash. The Flatpak and Steam builds use it too, now.
Thanks to that, friends of the command line can disable/enable VSYNC with the SDL12COMPAT_SYNC_TO_VBLANK environment variable, for example

Code: Select all

SDL12COMPAT_SYNC_TO_VBLANK=1 0launch -cr 'https://0install.armagetronad.org/armagetronad-beta.xml'
I'll see whether it is worthwhile to cherry pick the VSYNC menu entries from 0.4.
Edit, it was.
User avatar
Goose
On Lightcycle Grid
Posts: 26
Joined: Sun May 08, 2022 9:50 am
Location: Germany

Re: 0.2.9.2 Release Process: Beta

Post by Goose »

Beta confirmed working. But what's with the super new 0.4 beta? That gives me an error message "random_device::random_device(const std::string%)" and refuses to start on Windows XP and 7.

Say, have you heard about this network stack "Enet"? It is used in the racing game "Re-Volt", an old one which got an open port being called RVGL. The star is the network performance there. 16 players battling it out in a fluent way, also excellent real-time collision detection. Almost no lagging with players across the world. The best that I ever played.
I wonder if Armagetron is hindered a bit by some weird in-game happenings, when the network isn't 100% perfect. Those laggy situations, when some unexpected crashes happen. "But I was in front!" Yes, on your computer for 0.1 seconds maybe, but then the lag turned in and the server decided that you crash instead. Of course it's playable, but it doesn't look too good, when the game acts rather inconsistent.

Links to Enet Network Stack: http://enet.bespin.org/
User avatar
Z-Man
God & Project Admin
Posts: 11587
Joined: Sun Jan 23, 2005 6:01 pm
Location: Cologne
Contact:

Re: 0.2.9.2 Release Process: Beta

Post by Z-Man »

Goose wrote: Tue Jan 16, 2024 9:54 pm Beta confirmed working. But what's with the super new 0.4 beta?
It has been here for a while, those are the builds from the trunk of the source control data.
Goose wrote: Tue Jan 16, 2024 9:54 pmThat gives me an error message "random_device::random_device(const std::string%)" and refuses to start on Windows XP and 7.
Oh, thanks for the info, I'll update the system requirements. I was not aware of doing anything that would break compatibility, but both are End Of Lifed and could be dangerous to use online, so I see no reason to repair that.
(First I'll check whether the build is accidentally totally broken and works for nobody, though)
Edit: The Windows build of trunk/experimental/0.4 is generally borked.
Goose wrote: Tue Jan 16, 2024 9:54 pmSay, have you heard about this network stack "Enet"?
Yeah, Godot uses it as backend as well. The bits it covers are not rocket science, it's sending messages reliably, and we don't have the resources to even begin considering switching to it right now. What has been more important for improvements of the game feel has been the higher level: what to put in those messages and how to interpret them when they arrive. Like, it all started out by turns just being communicated to the server by the turn direction, which was widely inadequate. Then we added the turn time, which improved things, and later still the turn position and turn count so far, so that intermediate missing turn commands can be reconstructed.

I forgot to state: Please restrict this thread to discussions of things that are worse on 0.2.9.2 than on 0.2.9.1. New bugs, strange performance differences, graphical glitches that were not there before.
User avatar
Z-Man
God & Project Admin
Posts: 11587
Joined: Sun Jan 23, 2005 6:01 pm
Location: Cologne
Contact:

Re: 0.2.9.2 Release Process: Beta

Post by Z-Man »

Time for the release candidate phase! See the updated first post for current builds. In case you don't remember (and I would not blame you) or are new, the builds marked with 'rc' are identical to the ones with the same version suffix from the beta branch, but the difference is the branding. The beta versions use a separate configuration directory, while the rc builds already act like the real thing and read and modify your regular configuration. If you are on the beta branch on any of the auto-updating channels, you can stay there.

For some certainly good reason I forgot, the rc builds land in the 'staging' branch on Steam.

The rc phase is going to last at least two more weeks.

There were two changes since the first post here: There now is a VSync menu item in the screen configuration, and the FPS display has received a small fix; it always underestimated the real FPS a bit, then also always rounded the result down. So if you were wondering why you'll only ever get 59 FPS, that is why. The rounding is now regular rounding to the nearest integer.
User avatar
sinewav
Graphic Artist
Posts: 6413
Joined: Wed Jan 23, 2008 3:37 am
Contact:

Re: 0.2.9.2 Release Process: Beta

Post by sinewav »

AppImage works fine on Ubuntu.

CPU: AMD Ryzen 7 3800X (16) @ 3.900GH
GPU: NVIDIA GeForce RTX 2060 SUPER
User avatar
Z-Man
God & Project Admin
Posts: 11587
Joined: Sun Jan 23, 2005 6:01 pm
Location: Cologne
Contact:

Re: 0.2.9.2 Release Process: Beta

Post by Z-Man »

Thanks for the feedback!

Umm. Funny thing. Remember way back, when we found out that the clever pattern to avoid null checks before function calls

Code: Select all

class X
{
  void f()
  {
    if(!this) return;
    // do some actual work
  }
}
was undefined behavior, the compiler was allowed to assume 'this' was never null and the check could turn into a NOP? And when gcc actually decided to do just that, some bits of network code broke and crashed? (We were not the only ones hit, by the way).

Anyway. Something along those lines happened again. This time, it was the humble loop

Code: Select all

        while ( sn_FirstServer )
        {
            nServerInfo * server = sn_FirstServer;
            server->Remove();
            server->Insert( sn_masterList );
        }
when loading the master server list. sn_FirstServer is the first pointer to the list of just loaded nServerInfo structures, and server->Remove() would remove itself from that list, modifying sn_FirstServer and setting it to the next. Only it does so not via its real type, 'nServerInfo *', but as a pointer to the list base class 'tListItemBase *'. These two pointer types are unrelated and the compiler is allowed to assume they can never occupy the same space. And thus it is allowed to assume the tListItemBase * manipulations in server->Remove() cannot possibly modify sn_FirstServer. It then can remove both the repeated check in the while loop and re-fetching it into the server variable, turning the whole thing into an infinite loop. Even though infinite loops are also undefined behavior.
Now, what protected us from that happening was that server->Remove() was implemented in a separate .cpp file, where the compiler could not see what it was doing, and therefore not draw any conclusions.
That protection broke down. The Fedora build apparently applies some whole program optimization and manages to inline the call, setting the whole thing into motion. Therefore, this.

Anyway, the fix was straightforward, just get rid of reinterpret_cast shenanigans in tLinkedList.h, get rid of the non-template base class. I only pushed it to the beta and legacy_0.2.9 branches, the release_0.2.9 branch will follow shortly.

This is mostly a source problem. Our own builds were not affected because we use very old compilers.
User avatar
Z-Man
God & Project Admin
Posts: 11587
Joined: Sun Jan 23, 2005 6:01 pm
Location: Cologne
Contact:

Re: 0.2.9.2 Release Process: Beta

Post by Z-Man »

The fix is now on all branches and all current source tarballs and builds.
User avatar
Z-Man
God & Project Admin
Posts: 11587
Joined: Sun Jan 23, 2005 6:01 pm
Location: Cologne
Contact:

Re: 0.2.9.2 Release Process: Final Staging

Post by Z-Man »

The hopefully final build is available: 0.2.9.2.1.
Why .1 already? .0 died a quick death to a sad trombone sound.

The new builds are also available on the staging ppa.
It was also supposed to appear on the zero install feed, but I borked that with a recent refactoring.
Edit: No, it did not. Well, maybe. It got overwritten by a later pipeline, rerunning a job fixed it. If you have zero install, you can run the build with

Code: Select all

0launch --version=0.2.9.2.. https://0install.armagetronad.org/armagetronad.xml
User avatar
numinit
On Lightcycle Grid
Posts: 23
Joined: Sat Dec 06, 2008 5:52 am

Re: 0.2.9.2 Release Process: Released

Post by numinit »

Should be up in nixpkgs-unstable once the PR gets merged. The following should work:

Code: Select all

nix run nixpkgs#armagetronad
nix run nixpkgs#armagetronad.dedicated
nix run 'nixpkgs#armagetronad."0.2.9-sty+ct+ap"'
nix run 'nixpkgs#armagetronad."0.2.9-sty+ct+ap".dedicated'
nix run 'nixpkgs#armagetronad."0.4"'
nix run 'nixpkgs#armagetronad."0.4".dedicated'
User avatar
numinit
On Lightcycle Grid
Posts: 23
Joined: Sat Dec 06, 2008 5:52 am

Re: 0.2.9.2 Release Process: Released

Post by numinit »

A significant environment change for Linux users is that since 0.2.9.1, most distributions have migrated from native sdl 1.2 to sdl12-compat, a wrapper around sdl 2.0 providing interfaces compatible with sdl 1.2. You may remember that from a while back when we had to release 0.2.9.1.1 to work around a crash. The Flatpak and Steam builds use it too, now.
I've tried 0.2.9.1+ builds in nixpkgs with SDL_compat and SDL2 in the buildInputs, and get things like:

Code: Select all

armagetronad> engine/eSound.cpp:52:10: fatal error: SDL_mixer.h: No such file or directory
armagetronad>    52 | #include <SDL_mixer.h>
Do you have to do anything special to enable it in the configure flags? For now nixpkgs is happily compiling with SDL 1.2 but seems worth trying to move it over if possible.
User avatar
Z-Man
God & Project Admin
Posts: 11587
Joined: Sun Jan 23, 2005 6:01 pm
Location: Cologne
Contact:

Re: 0.2.9.2 Release Process: Released

Post by Z-Man »

No, SDL_compat is supposed to be a straight replacement for SDL1.2. Mind that you still need the 1.2 versions of SDL_mixer and SDL_image. I use something like "nix-shell -p git gcc gnumake pkg-config autoconf automake which gnum4 python3 libxml2 libpng SDL2 SDL_compat SDL_image SDL_mixer" for development of that branch, and that works.

And thanks!
Post Reply