ENIGMA Forums

Development => Works in Progress => Topic started by: Foxide on June 08, 2020, 12:51:22 pm

Title: PolyOne (Now on Itch.io!)
Post by: Foxide on June 08, 2020, 12:51:22 pm
***Download the latest version for free from itch.io here!*** (https://mbillington.itch.io/polyonelite)

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.
6. An offline HTML & CSS manual is included and accessible by F1, right now it just functions as a glorified Game Information, but of course it could be improved and made easier to navigate with JavaScript.
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!
(https://www.dropbox.com/s/maop5275fbydvlv/20200603171537_1.jpg?raw=1)
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).

(https://www.dropbox.com/s/954cvm35irwo2qi/p1jsv.PNG?raw=1)
A little sample of the JSV file that is the above map.

(https://www.dropbox.com/s/zq6clklz2yqoydt/p1config.PNG?raw=1)
The config file.

(https://www.dropbox.com/s/l0zk5x07ad7kcqa/p1dialog.PNG?raw=1)
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.

Get the latest version (0.3.4.4 RC2) here (https://www.dropbox.com/s/io8q3egbo65soxp/PolyOne_0344-RC2.rar?raw=1)
Changelogs are contained in the Manual folder.

Old versions:
0.3.4.4 (https://www.dropbox.com/s/adikuy6aezlfyrb/PolyOne_0344.rar?raw=1)
0.3.4.2 RC2 (https://www.dropbox.com/s/acja6zf8yp7xhiy/PolyOne_0342-RC2.rar?raw=1)
Title: Re: PolyOne, (Updated 07-Aug-2020 to 0.3.4.4)
Post by: Foxide on August 10, 2020, 02:18:19 pm
Ok, sorry for the double post but I think it's necessary to distinguish this post from the thread opener.
I soon intend to release the last free version of PolyOne which will get any significant new features. After that, most of what is added will be improving features that already exist and of course fixing bugs. With that in mind, I may be setting up an itch.io page for PolyOne within the next month and have a few questions:


Any answers would be much appreciated  (Y)
Title: Re: PolyOne, (Updated 07-Aug-2020 to 0.3.4.4)
Post by: Josh @ Dreamland on September 13, 2020, 06:28:06 pm
If I recall correctly from the wiki, the ENIGMA license does permit using it to develop commercial software. Even so, am I incorrect in my remembering this and are there any gotchas I should watch out for that may invalidate that permission?
We're specifically looking to exclude this usecase from our GPL exemption—IDEs using ENIGMA logic would have to share its license (or default to pure GPL). Only games created by the end user will be exempt from GPL (and allowed to remain closed-source).

Should it be possible to run Ubuntu on VMWare Player 3.0?
I assume so, but I am unfamiliar with that particular VM.

Would it be enough to do a PolyOne build, make sure it all seems to be working, then make that a release candidate, or is there some reason that I would have to create individual builds for different Linux distros? My guess is the answer is no, as most Linux and Windows-compatible software I have seen does not have different versions for different Linux distros.
Generally, it's an issue of convenience. Most software teams only support Ubuntu, and other distributions pick up the slack from there.

Should I expect a poor reception as a result of not sharing the source code of PolyOne?
Not necessarily. Different people care differently about their software's license, so long as it meets their usecase.

I don't have plans to include any kind of copy protection in the paid version. Is it something I should be worried about?
Probably not. People will pay for your software if they feel like it. Any protection would serve as a barrier to new users and would be circumvented quickly by pirates if your software was worth it.

There are a few similarities that my software has, at least visually, to many other pieces of software. I don't consider it possible to avoid every piece of software which has ever been created, and PolyOne isn't the only case of this situation. Should I be worried about patent trolls trying to sue me for obscene amounts of money?
There is a lot of prior art in the game development space which tends to render that impossible. ENIGMA's viral licensing is part of its survival tactics, there, however.

Does the Patreon only fund RadialGM, or does it also include ENIGMA?
The Patreon supports both projects (the developer base is the same).