Saturday, March 11, 2023

0006 | Microsoft Painted us in a Corner

Microsoft left a mess for us to cleanup

 Microsoft XNA

In 2004 Microsoft announced development of a new game development framework called XNA that would allow C# developers to have the same level of access to low level graphics and sound components such as DirectX.   C# was getting to be hot at the time too.   Basically, XNA is C# wrappers around the DirectX C++ libraries.  In 2006 the first version of XNA was released.  

Now you might ask yourself, why bother with C# if you can program in C++ and just use DirectX.   Well, the short answer is that with C# it is far easier to create a cross platform solutions for iOS, Linux, XBox, and even stuff like Raspberry Pie.   Because C# doesn't compile down to machine code (chip manufacture specific), it instead compiles to a ubiquitous intermediary code that then can run in a Common Language Runtime (CLR) environment.  This is basically a language that is universal between hardware, and the CLR compiles it to machine specific code for a specific chipset just before it runs.   

You do pay a speed penalty at load time but given that you can write code for many platforms at once, the tradeoff is worth it!  Not to mention that most games run at 60 frames per second, and the Cortex engine will do thousands of frames per second when unbridled.  So there is enough horsepower to spare. (Giggle Horse Power that is)

C# is also a far easier language to learn and use than C++ because the heap is managed for you. So naturally we adopted both C# and XNA for the Cortex engine.  






Why was XNA abandoned?

XNA was its own worst enemy.  With C# and XNA, it lowered the bar for entry into developing video games substantially.  That seems like it would be a good thing, yeah?  Well Microsoft started the XNA Creators Club, which allowed anyone, and I mean anyone, to create a game with XNA and release it on Windows and XBox 360.  This was Microsoft embracing the Indie games movement.

You would think this would be awesome, and we would have more games to choose from.  However, there was such a flood of games, and not enough people to vet them that tons of total shit games were being released.  The same thing was happening on Steam at the time, which led them to implement their green light program, which turned out to be a nightmare in its own right.  So, for about two years there were AAA games being released along with thousands of games that were total trash.  

The market got very diluted with garbage very quickly.  In an effort to get this all under control, Microsoft scrapped the Creator's Club, and also abandoned XNA.   This is sad, because it wasn't the technology's fault.    At the same time, Steam decided to just make you pay for entry.  

I really wish that Microsoft would have just taken a page from Steam and made people pay to submit a game.  That would have cut down the crap very quickly. 






Microsoft Cock Blocks XNA on Visual Studio

XNA was, and still is, a very viable solution for cross-platform development.   Unfortunately, Microsoft doesn't see it as such.  Not only did they stop supporting it, but when Visual Studio 2019 came out, they completely blocked the installation of the development tools and frameworks.   What a crock of shit!

I won't go into it, but I can't tell you the hoops and tricks I had to jump through to trick Visual Studio 2019 to install the framework so that we could use Cortex again.   

This really pisses me off because they are essentially blocking technologies developed by companies  that might use their framework just because they want to play gatekeeper.  

I'm being very calm here, LOL can't you tell, but I can't even tell you how many hours of frustration I went through to get our own technology to compile again because they decided to be technology Nazis.  







Crashes and Fixes

So here we are in 2023 with Cortex 7.2 developing Absolute Zero, when all of a sudden, a weird and random crash started to appear.   I instantly blamed my code in the Cortex engine, even though it has been stable for years.   So, after debugging very deep into the engine, I finally caught the unhandled exception.   It was Microsoft XNA throwing it!   It also wasn't a simple invalid range type exception.  

Exception thrown: 'System.Runtime.InteropServices.SEHException' in Microsoft.Xna.Framework.Xact.dll

This started to make me wonder if the framework always had this error, or something more nefarious. 

Funny thing.  XNA was supposed to abandon in 2013, however we can upload Absolute Zero to Steam, and then install it from there and suddenly we get XNA framework files with versions that are as much as 10 versions past ours with the Microsoft msi install.   To add to the weirdness, these are frameworks that don't seem to be downloadable from Microsoft.

It makes me suspicious that they are updating things for Steam so games don't crash, but making sure that we can't independently release on Windows with an installer.  






Breaking free

Thankfully, there have been many groups that have taken the XNA tech and made it their own and made it open source so things like this can't happen again.  At least not by Microsoft.   The best-known technology that is open source, cross platform, and from what I can tell, bug free relative the original incarnation of XNA is MonoGame.   

For those of you that know me, know this is my fourth game engine, and I have won lots of awards for this one, including from Intel themselves!   So, I could write all the backend parts myself, but I believe the folks over at MonoGame have done a superb job.   There is no need for me to reinvent that wheel.  Also, the Cortex engine ports straight over and MonoGame doesn't require a third-party installer like XNA did, making sure that "our" version of the game stays that way.  So, thank you MonoGame.  

I'm actually surprised that MonoGame is not more widely used to tell you the truth.  






A Conspiracy of My Own Making?

Is this some crazy conspiracy I made up.  Maybe.  Maybe I am completely wrong about Microsoft.  Here is what I do know.  
  1. We can build Absolute Zero with a standalone installer using the latest download of XNA from Microsoft's website.
  2. That version has a bug that is Microsoft's, and we have to catch it to make sure that the game doesn't crash.
  3. We can push that build to Steam.
  4. We can then install that build from Steam onto a clean box where XNA was never installed.
  5. That version won't crash.
  6. The XNA framework that Steam's installs have files that are several versions past the supposed "Newest" version you can download from Microsoft.  
This leads me to believe that Microsoft might be secretly supplying updates to their framework to Steam while giving the rest of us that aren't making billions the finger.  

Given this information, you can judge for yourself.   In any case, we have fixed the situation for both Steam and the standalone release of Absolute Zero.  

If Microsoft doesn't want us to use their tech, and they have made my life hell trying to do just that,   I'm going to comply with their wishes.

Just my extra 2 cents, but this is another reason I hope the Activision / Microsoft deal doesn't go through.  They don't need more control over any part of the gaming industry.  




Support Giggle Horse and Wish List Absolute Zero!

Okay, enough ranting about mean billionaire companies.  Absolute Zero is fixed, and it will run without issue when it is released.   So go wish list and help out the little guy!  Thanks everyone.

Add To Wishlist!

No comments:

Post a Comment

Popular Posts