Skip to content
Vadim Dyachenko edited this page Jul 14, 2021 · 2 revisions

Meta

Who is GMEdit for?

GMEdit is for people that write code!

In general, the more code you write and the more complex your code can get, the more apparent GMEdit's benefits will become - for example, while anyone can benefit from warnings about getting your function arguments wrong, enabling various linter option and making use of JSDoc tags can save you a lot of headache when writing more complex systems for GameMaker games.

What is the motivation behind GMEdit's development?

Efficiency is the primary motivation - GMEdit was initially developed with primary intention of allowing me to work on contract projects faster - particularly with Nuclear Throne, it was pretty apparent that "vanilla" GM workflow (popout windows in GMS1 or floating windows in GMS2) wasn't really holding up for making small and numerous changes that the game required.

Many of GMEdit's features exist because I thought about something and decided that implementation cost justifies long-term benefits. Or, occasionally, because someone insisted that a feature would be extremely pivotal to their workflow and agreed to pay for its development.

Why can't you edit some resource types in GMEdit?

During initial development there were two apparent paths:

  1. Spend several months of my time adding every kind of resource editor to the tool and sell it at a premium price.
  2. Release the tool as free and open-source and hope that people will eventually contribute features that they want.

Based on Parakeet IDE's example, it seemed that it remains to be hard to sell a better IDE to GameMaker users - no matter how much work you put into it - so I went with the latter option.

For the most part, it's just me working on GMEdit (see GitHub stats for a vague impression), but occasionally people contribute smaller changes.

Plugin support was developed to allow people to extend the editor (including adding new resource editors) without having to know Haxe, but turns out that someone still has to make such a thing first.

Why is GMEdit standalone and not a plugin for VSCode/Atom/etc.?

During initial development (late 2017) I have evaluated my options and established that this was the path of least resistance - both VSCode's and Atom's APIs for semantic syntax highlighting were still in infancy stage at the time, and I knew that I could deliver an experience that I wanted with Ace based on my past work on GMLive.js.

Many of GMEdit's features also rely on having a good degree of control over the code editor's behaviour - for example, when viewing a tab that corresponds to multiple files on disk, I display line numbers within scope of each file, which can be hard to accomplish with the current VSC extension API. Similarly, even just having a tab that's multiple files requires wrangling virtual document and/or virtual file system APIs.

All in all, although it is possible to decouple GMEdit's logic enough that parts of it could be used in extensions for other editors, it's hard to think of why someone would be willing to do that to themselves / willing to pay me to do so.

Can you compile/run games from GMEdit?

You can - see this wiki page.

Code editor

Can you change code editor font/size?

You can do so in code editor settings (open from Preferences or using Ctrl+,).

Can you change code editor colors?

You can make a child theme that inherits from a base theme of your liking (built-in or custom) and changes any colors. You can also import your GMS1/GMS2 colors.

What is that gray line on the right side of the code editor?

That's print margin! Similarly, you can adjust/disable it in code editor settings.

Can you auto-format code?

At one point a formatter was contributed, but it turns out that formatting GML code is hard work! Especially due to optional semicolons - you can't tell where one statement ends and another starts without replicating a good chunk of the compiler.

You could make a very tiny plugin to invoke gml_fmt on the current file (see here for details).

Exotic

Can you run GMEdit in a browser?

Kind of (see: github-pages branch)! But you can't compile/run games from the browser, so what for?

Better workflow:

Syntax extensions:

  • `vals: $v1 $v2` (template strings)
  • #args (pre-2.3 named arguments)
  • ??= (for pre-GM2022 optional arguments)
  • ?? ?. ?[ (pre-GM2022 null-conditional operators)
  • #lambda (pre-2.3 function literals)
  • => (2.3+ function shorthands)
  • #import (namespaces and aliases)
  • v:Type (local variable types)
  • #mfunc (macros with arguments)
  • #gmcr (coroutines)

Customization:

User-created:

Other:

Clone this wiki locally