GM Incompatibilities

From ENIGMA
Jump to navigation Jump to search

This is a list of all known incompatibilities with GM. This list does not including features that are simply just unimplemented yet, for that see ENIGMA:Todo. Note some perceived incompatibilities may also just be bugs.

Most of these incompatibilities are likely to stay in ENIGMA, but some may be added as a compatibility option in the future.

Coding Incompatibilities

  • List of Deprecated_GML behaviours
  • List of Category:Function:Obsolete
  • 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.
  • In events GM (before Studio) handles separate code piece actions as different code segments whereas ENIGMA lumps all actions together as a single code segments. Thus is you use return; or exit; in a code piece in ENIGMA it will stop all following actions being executed in the event whereas in GM it will only exit the single code piece return; or exit; was placed in
  • When calling instance_destroy() and other such actions which end a code segment, in ENIGMA the code segment is exited instantly and the action is performed whereas in GM the rest of the code segment currently being executed is finished before the action is performed
  • In GM when using non-integer values on integer argument GM rounds the number whereas in ENIGMA it floors it; note this also happens when using repeat(){} so watch out for this reducing things like movement.
  • In GM image_angle is always bounded to the range [0, 360), ENIGMA does not do this
  • In GM the creation event is executed after the instance creation code, it is reversed in ENIGMA with the instance creation code being executed after the creation event.

Graphical Incompatibilities

  • Things like lighting and alpha channels (and other things) are handled slightly differently in OpenGL to DirectX so will be probably notice small differences in some effects
  • OpenGL doesn't handle Z fighting the same as DirectX, so if you have textures drawn in the same location things may behave differently. Especially make sure to take note of this when using transparent drawing
  • OpenGL isn't fond of rapidly changing the scaling when drawing something transparent.
  • OpenGL handles fog differently to DirectX. This can cause unwanted effects on older graphics cards when using d3d_set_fog
  • Some things that directX implemented for is now mimicked only in OpenGL3 (such as vbos and fbos- which are used by surfaces). And OpenGL3 is not available on some older graphics cards
  • The use of d3d_transform_rotation_* functions and d3d drawing functions with z values set do not work for OpenGL 2D drawing, they have to be in 3d mode to work unless the z is always set to 0.

Other Incompatibilities

  • The ds_*_write/read functions use a different file format, so you will not be able to load saved lists from GM into ENIGMA and visa versa