Since my game just keeped stagnating, I decided to invest a little time to create a simple, elementary level-editor, such that I can easily create the basics of Levels without always having to write a lot of code by hand. So far it always was drawing on paper, then typing lisp-code, then testing, then typing lisp code again, then making corrections, etc. – which is a very slow way.
I had a few problems the last few days, which kept me from finishing it. But at least now the „proof of concept“ is ready (even though it isnt a usable leveleditor yet). I want to have a minimal GUI which is simple to implement, and I think thats what I have created so far.
After a lot of searching I decided to use Ltk as widget-toolkit. Furthermore I use imagemagick externally (which in the end will only be necessary for compiling), and tk-img to extend Ltk. I also used cl-base64, but at the moment I am using a small base64-implementation of my own.
Many people – even Lispers – do not like Tk (on which Ltk bases). Ltk especially calls an external process, a Tcl Shell, to create GUIs, which is not very beautyful. And yes, Tk doesnt look that good. But on the other hand, it is highly portable and comparably easy, and calling an external shell makes it simple to extend and the library. In fact, I thought about using aplay for sound-output instead of using SDL or some other sound-library which tend to produce problems.
Compared to other FFI-Bindings to Qt, GTK or WxWidgets, Ltk is easy to learn and worked almost out-of-the-box. Thats the main reasons for me to use it. The bindings are very „lispy“, while the stable GTK and QT-Bindings are mostly very lowlevel and you see from where they come – C.
So here it is, a first proof-of-concept-window:
I am addicting objects to a grid, even though my engine doesnt need such a grid. But for anything else, I can still manipulate the source code myself.
I know this is nothing special. But its mine.
Stay Tuned. As soon as the whole thing works I will try to make a Video showing what works so far. And then maybe release the first part of the code.
Help is always appreciated ;-)