Yeah, in 2.3 they definitely changed script order to random. You can notice that especially after importing some assets - imported scripts gets random positions between another in .yyp file even if they are inside same group.
It may sound as a illogical behaviour, since 2.3 also introduced a more flexible way of defining global variables outside of functions, but because scripts will be ordered randomly now - you can't use functions from scripts other than current to define things to prevent crashing game on start. I'm nearly sure it's caused by sorting options of Asset Tree - changing from "Custom" to "A-Z" or "Z-A" would also change order of script execution if it will be working same as pre-2.3, and sorting selection isn't saved in project (you can find it in %APPDATA%/GameMakerStudio2/<GMUSER>/Layouts/<PROJECT_NAME>
), so it's not shared by developers, and that would cause even more random errors.
There's one safe way to run code before any room/instance is created, as they didn't removed it from docs, seems that gml_pragma("global", "FUNCTION_NAME()");
still works, so it should probably allow to set order of script execution on game start (remember that you can't access window/room/instances properties yet when using it). As long as it's defined in only one script, order should be known this way.