Quick edit to say: Sorry if this is in the wrong section, I didn't find anything for non-game software being developed in ENIGMA! Please move to another section if preferred, no questions asked!
Greetings, ENIGMA developers and fans. I would like to share with you a piece of game development software I have been iteratively improving since some time in 2011/2012 using ENIGMA and LateralGM. It's a level editor that takes advantage of the draw_vertex feature of GM and by extension ENIGMA, with the original idea being to get around some of the limitations of the room and to a large extent the tile editor in GM 6.1 (which is what I was using way back in 2012!). At a certain point I realised a piece of software like this could have uses outside of just the specific game I had been making.
If you don't like text walls and want the TL;DR, scroll to the end for a few screenshots! No hard feelings because I'm pretty bad when it comes to brevity.
The software saves and loads level data as JSV files, with JSV being like a combination of JSON and CSV that was conceived by ServiceStack and is typically more compact. However, you can export loaded files as JSON for use in ENIGMA or other game engines, even those that might use different programming languages. Once you have the data in your game, the obvious thing to do would be to fill vertex array objects or vertex buffer objects (it's a long time since I worked with GLSL or other low-level shader languages so please correct me if I'm using these terms incorrectly) and render as needed. Admittedly, PolyOne only supports 2D at the moment and realistically would need a lot of rework, or so I'd imagine, to be able to display 3D polygon data in an intuitive way. The technical chops needed to be able to make it work are kind of beyond me at the moment in my opinion.
Despite the original goal of PolyOne, you could use it in a number of other ways. Being able to export a portion of the level indicated by a rectangular selection as a PNG means you can reload it into PolyOne as a texture by restarting the application. In the future, I intend to make it possible to "refresh" the available textures with just a click, whereupon the editor will check the user-definable folder from the config file and one subfolder deep for the PNG files which it loads as textures. The capability available already means you could use PolyOne as an unorthodox way to create gestalt textures, tilesheets, or 2D models.
The user interface is inspired by image editing software, as well as some level creation software for other game engines and even a certain IDE.
Some points and/or features that I'd like to brag about:
1. Although very much incomplete and with lots of plans for the future, PolyOne already has a decent set of features that streamline the creation process. You can create polygons vertex by vertex, as full polygons, quads, copy and paste whole sets of polygons, flip selections horizontal/vertical, etc.
2. The program has no theoretical limit to window size, although the size of the window can't be adjusted once it's open. The minimum size is 1024x768.
3. The user interface is written from scratch in GML, which absolutely has been a big development time sink, but means things can be made very bespoke in a way that makes sense for PolyOne and might even set it ahead of the products it was inspired by... Rarely. The UI scale can also be set in the config file, although not changed while the application is running. That's yet another feature planned for the future. Text does the built-in draw_text feature though, so font size scales in increments.
4. A basic implementation of custom themes, which really just gives you some control over the colours of the user interface. This is one thing I need to test again to make sure everything is working.
5. As of the time of writing, the software is probably about 10k lines of GML including scripts. I say this being well aware that quantity does not equal quality! However, this does include little abstractions like using the same dialog and dropdown objects and passing the behavior it must carry out at creation time, with yet another object being passed from the instantiator of the dialog/dropdown carrying the parameter information needed by the function, in other words passed from instantiator to dropdown/dialog to script.
7. Nearly everything has tooltips!
And now the parts I'm not so proud of:
1. The vestiges of an undo/redo feature are present and cause things to break if you instinctively use them. I should just complete the feature or remove it until it's presentable.
2. It's been made in a really old version of the ENIGMA portable version. I tried installing MSYS2 but Avast ruined the install and I couldn't find a way to make Avast leave it alone. Which brings me to my next point
3. I've only built and tested it on Windows 7 and Windows 10.
4. There's a bug with file writing in which the saved file doesn't finish writing content until the application is closed. This can cause the file to become corrupt and data to be lost when overwriting the original file. I am unsure as of yet whether this is a problem with my own file reading/writing code or as a result of using such an old portable version of ENIGMA. I have made sure the files being written to are closed when writing is complete as far as the GML is concerned, but I could always triple-check this.
5. There's not much that can be configured now, and what there is requires you to jump into the config.ini file, change things and restart the application, but I intend to address this problem.
6. There's no way to integrate your own game objects with the editor, but I plan to address this in future versions
7. You can't open multiple files and edit them in separate tabs
8. There are numerous dialogs that have a checkbox labelled "don't show again". So far it's ignored if you leave this checked.
9. Text fields don't behave precisely as they do in other applications. This can be improved, but I haven't gotten around to it yet.
10. It can be clunky and slow to create stuff at times, but this is somewhat dependent on what you're trying to achieve and your patience and/or foresight for saving things that can/would be reused
11. There are no restrictions, and this can be as much of a detriment as it is an advantage, as you could use forbidden characters in a text field and break your entire file!
When development reaches a certain point that I have already planned ahead for, I plan to make PolyOne a commercial product for sale on itch.io for $10. With that in mind, not to mention the embarrassing quality of the codebase in places, I don't have plans to open source this as of yet. However, I am open to the idea of creating DLLs and modules in other programming languages, and posting my own GML for reading the JSV files for those that might desire it; the current reader simply converts the read contents into a few arrays without any context of what that means for PolyOne, so could therefore be adapted to read PolyOne JSV files from any project.
Enough of the talk, here, have some screenshots!This is one example of something I was putting together for a tabletop RPG, but also as a demo of the kind of thing that can be achieved! Many of the textures are from Half-Life 2 (these will never be included with the download, some sub-par pixel art textures I made years ago are included instead to demonstrate the texture loading capabilities).A little sample of the JSV file that is the above map.The config file.One of many dialogs.
Thanks for checking this out and I hope you'll like the concept! I would love to hear your thoughts, positive and/or negative. This is my first time really sharing anything about this publicly, after so long so it'd be really interesting.
Edit: Here's a download link: https://www.dropbox.com/s/acja6zf8yp7xhiy/PolyOne_0342-RC2.rar?raw=1