Welcome to Gehn27b! Fixes in this build include: the intro video should no longer crash on CPUs released before 2011.
This was an interesting problem, so excuse me if I spend a few moments to talk about it. If you don't like talk, here's
a screenshot of me verifying the fix.
There is a bug in MOULa currently where launching the game without PhysX installed causes the game to immediately crash. If you've been following along with this issue, you know that it's very easy for PhysX to get uninstalled. This bug is actually my fault and is in code that was taken from one of my contributions to the H'uru client that we use and moved into the OpenUru client. We never saw that here because the Gehn client does a good job of making sure PhysX is installed in a way that can't be easily undone, but the issue has been silently present in our shard for years. I actually fixed the underlying issue for Gehn 27 and submitted a cut down version of the same to OpenURU as well.
My first reaction on seeing crashes on launch was, among various swear words, "I THOUGHT I FIXED THAT!!!" I was tempted to just post a link to the PhysX legacy installer and say, "install this and get off my lawn!" After a few minutes, I decided to look at the logs first. Needless to say, the logs pointed a finger at a very different culprit. PhysX was finally not to blame! Yay, I actually did something right. The logs pointed to our firing up the opus audio decoder when playing the intro video with the error "Invalid Instruction". Gulp. This might be more exciting...
So, the first step is to figure out what CPU everyone is using. The error is, after all, that the CPU does not understand what the heck it's being told to do. Duclamara very kindly posted her CPU-Z. If you look at the list of "Instructions" you will notice that her list and mine are somewhat different. I reopened the crash dump file and *gulp* dove into the assembly code to figure out which particular instruction was crashing the game. In this case it was the instruction
vpxor... an AVX instruction. An AVX instruction that was being called by the code to determine which instructions could be used. Wut.
Upon much sleuthing through the libopus source code and build system files, I discovered the issue. The maintainers of opus incorrectly wrote the build configuration for Windows (and Visual C++) to detect the most recent instruction set supported by the compiler... and set that to the minimum requirement for executing the entire library. I think this was due to a misunderstanding about how different CPU instruction sets work from gcc (the "linux compiler") vs Visual C++ (the "Windows compiler"). What they have done should work fine in gcc.
Anyway, it was relatively trivial to patch the minimum requirement down to "any x86 CPU." Now to just figure out how to ramtangle all this into something to bring to the libopus team, who probably don't know anything about Windows development aside from "it compiles, ship it!!!"
EDIT: It looks like I'm
not the
only one to discover this pitfall.