Hi Talkashie! impo's advice is one way to go/thing to try. Regarding the boolean cast issue, that used to be a bigger incompatibility than it is now. Yes, it's true that C++ casts booleans differently than the old GML. In fact, most programming languages cast booleans the way C99 did (I mean C#/Java/etc).
When any scalar value is converted to _Bool, the result is 0 if the value compares equal to 0; otherwise, the result is 1.
Now, it's no longer as much of an incompatibility, because I changed the collision functions to have a special return type, that when cast to boolean will give the expected behavior of older GM versions. I brought this to ENIGMA for the same reasons YoYo, at some point, did it for GMSv1.4. Additionally, our variant data type has always cast to boolean the way classic GM did. So, these days, in ENIGMA, unless you literally declare your variable with the [snip]bool[/snip] data type, you will get the expected behavior of older GM versions.https://github.com/enigma-dev/enigma-dev/pull/1218
For these reasons, I have now actually updated the wiki page you were referring to. It now more accurately mentions that we have dealt with the collision functions and there shouldn't be incompatibilities here now.https://enigma-dev.org/docs/Wiki/GM_Incompatibilities#Coding_Incompatibilities
In GM values < 0.5 are treated as false, in C++ only a value equal to 0 is treated as false. ENIGMA's variant type and instance type (returned by collision functions) have special boolean casting rules so that they give the expected results of earlier GameMaker versions when tested in conditional statements.