Yep, it _is_ absolutely awful.

I know that thread you posted and I've read it many times. I recently checked all my models to make sure there are none with "mixed" or only empty skins. It's possible that I missed one, so I'll be going through all of them again tomorrow, just to make sure. But as far as I remember, that bug had been fixed anyway, right...?

Brings me to your next question: Yes, I'm using the latest version (8.47.1 (Pro, if that makes any difference)), and made sure the guys supporting me do so, as well.

Next: Yes, there's a single sky entity in the game. It's defined like this:
Code:
ENTITY* skyscene =
{
  type = "sky_scene05a.mdl";
  layer = 3; 
  scale_x = 380; 
  scale_y = 380; 
  scale_z = 380; 
  y = 28000;
  flags2 = SKY | SCENE;
  flags = FLAG2;
  albedo = 100;
}



Things I'm doing with it at runtime:
  • change of position vector
  • change of scale_x vector
  • visibility control (via flags2 - SHOW)
  • color manipulation (by modifying red/green/blue)
  • ent_morph'ing to different, level-specific models after level_load

Sound: No, I did not try that using the engine parameter. What I did so far was to test with sound_vol set to zero, and that didn't make a difference (if I remember that correctly). Will check that tomorrow.

Plugins: In fact, I don't recall having these issues before starting the Steam implementation - however, I've changed so many things around that time, that it could easily be almost anything else. I'd rule this one out anyway, as the Steam plugin is currently fully disabled. I also removed the DLLs from my Win10 test environment, just to make sure. Good point with the NULL strings though - I will make sure to check all the strings I'm sending.

While we're at it - in my leaderboards code I have this slightly suspicious part where I'm fiddling around with a local short array and two char-pointers. Maybe let's have a look at it:

Code:
function mm_lb_fill() // used to fill lb strings
{
	(...)
	
	// defining local stuff...
	short short_array_x1024[1024];
	char* _nameUTF8="";
	char* _nameFINAL[10];

	(...) 

	// The function ends here.
	// No, I'm not removing the char pointers - should I?
}



Remember: As I said, the Steam implementation is currently turned off, so this part of the code should never be executed anyway. But since I recently learned that local STRING* pointers should a) be created using str_create(), rather than simply defining them like 'STRING* test = "";' and b) should also be str_remove'd by the end of the function, I keep asking myself if there's an equivalent guideline for using chars. Could the way I define them here be problematic? Could the precompiler come across this part of the code and go totally nuts? I mean, it shouldn't, for my understanding, but I'm starting to look for potential mistakes anywhere.