LateralGM (LGM) is an alternate Game Maker IDE compatible with both ENIGMA and Game Maker. It can be used to edit projects, but cannot run them without the use of an additional plugin. It has many other uses, including GM8 -> GM6/7 conversion. It is written in Java. The lead programmer and project founder is IsmAvatar. The project is also undergoing a C++ rewrite under the code name RadialGM.
Within the ENIGMA project, LateralGM is everything you see visually that does not involve the ENIGMA menu. It supports theming and customization and has preferences that even include a non drag and drop mode for people who only want to code.
Through the use of The Plugin, LGM may interface with ENIGMA so as to provide compiling and running of the projects. The LGM and ENIGMA projects are largely independent and modular, so that you can usually plug in a newer or older version of either and both will usually still function normally. Normally, when you obtain ENIGMA, it includes LateralGM and the relevant plugin.
LateralGM is designed to be very modular so interested projects can splice it up, reuse code, or create spin-offs however they like. Of course, there's the possibility of designing plugins for the purpose of compilers, runners, or internal modifications. The really interesting modularity, though, is that LateralGM keeps front-end (UI) completely separate from the back-end (file, resource), which allows easy replacement or removal of the UI, if desired, or simply only reusing the back-end. Finally, several of the internal classes or some groups of classes are completely independent and can be copied and reused without generating a dependency on LGM itself, such as certain UI components, as well as several of the File-related classes. This doesn't even mention the independent projects that get hooked into LGM, such as the code editor.
Building LGM is a process that is not as simple as running make on the directory with the source code, as there are many complex tasks that need to be done which make is less capable of, so we usually use ant instead. Generally, the tasks that need to be done to build are:
- Apply revision branding to the image and About box (although this may be phased out)
- Compile the classes with an appropriate compiler and settings (currently LGM doesn't compile with the standard Javac, and compiling requires an additional dependency on the Eclipse Java Compiler, although we're working on this)
- Zip it up into an executable jar
As you can see, this can be a complex task, so it is usually performed by a developer, but instructions are also available for anyone who wishes to build it, even from scratch.
LGM has several settings/preferences which can be changed, and has a settings panel to do so. There are hidden preferences however because we do not put everything in that frame, you can override these settings with Java Preferences. Please see Overriding settings for more details on these methods.
Plugins developed for LateralGM are usually written in Java, although they can be written in other languages as long as there is a java port in between that calls your module. The main article explaining how to develop a plugin is LateralGM:Plugins. An example of a plugin is the ENIGMA compiler plugin, aka The Plugin.
LGM is intended to be run in Java 7 or later, but will function on Java 6 or Java 5.
All versions suffer from Java bug 7035369 on Linux where Desktop.edit is not implemented, meaning that you can't use the default system editor to edit sprites, backgrounds, and sounds. For a workaround, specify a preferred editor for each. See No internal or system editor as well as #Overriding settings for a workaround.
Some versions suffer from Java bug 937200 where a package installed by WINE emulator overrides the JRE's fonts. The issue needs to be address by Oracle as they forgot to include font property files from the redhat build. The issue can be resolved by simply removing the font package installed by WINE and it will still work correctly. Terminal command is as follows...
sudo apt-get remove fonts-unfonts-core
Java 6 intermittently suffers from bug 6826104 on Linux which causes the dialog that appears when X'ing out of a resource frame ("Keep changes?") to throw a NullPointerException in sun.awt.X11.XWindowPeer.restoreTransientFor when you try to click on one of the buttons (like "No"). This bug is fixed in Java 7.
Java 5 is missing some key functionality that Java 6 has, but most of it can be reproduced by downloading an additional SwingLayout-LGM.jar and placing it next to lateralgm.jar. You are, however, strongly recommended to upgrade your Java to a later version.