Skip to content

zipsegv.net

Blog #1: What I've been doing

Created 8/9/2025, 6:29:38 PM

First time writing a blog , that's something new for me.

I've been doing a decent amount of random things recently, as I usually do. I'm not the kind of person to focus on one project at once (at least, not for more than a week); I usually work on many things at the same time and switch between them when I get bored of one.

1. Enki

Last week I've been working on something I call Enki (named for the Sumerian God), which is a world editing and scripting tool for Minecraft. Before, I used World Edit (which, don't get me wrong is a very useful and powerful tool) but it has a lot of problems. I'll enumerate them further when I release the first alpha version of Enki, but to be short, my problems with World Edit are that it is:
  • Ridden with magic syntax. Everything in World Edit has its own special syntax for it, and you have to constantly check the documentation if you want to know how to do something. In addition, while there is in-game documentation in the form of //help, it's not as in-depth as the online documentation and does not cover many of the intricacies of World Edit's syntax. Command syntax is generally pretty uniform (space-separated arguments, and unix-style optional arguments), but pattern/mask syntax has a billion different operators and you just have to hold all of them in your head. In addition, there's the expression syntax, which works in a completely different way and does not really interact with patterns and masks at all.
  • Not composable. There's no way I can compose the functionality of one command with another. I can't graph along the walls of a region or replace with a deform expression. In addition, the limited composition that exists with pattern/mask syntax is oftentimes just broken. World Edit was not really designed to be very composable, so sometimes when using combinations of pattern/mask operators that the developers did not expect, it does not do what it logically should.
  • Not extensible. If something doesn't exist in World Edit, you're just out of luck. You can maybe find a way to bodge it in with //deform and //graph, but it's going to be annoying and it may require you to write multiple commands just to do one simple thing, and that's assuming there's some arcane combination of invocations that lets you do it in the first place.
  • Only useable by players. You can't really use world edit in command blocks, or from other places. This is really annoying as the vanilla world manipulation commands are just, really really annoying to use, and are extremely limited. Now, it is technically possible via the use of a surrogate player and /execute (i.e. run the world edit commands as a player) but this is a bodge and temporarily takes over a player to do operations which isn't very convenient. Having first-class command block support would be much preferrable.
Enki solves most of these issues by simply being a programming language rather than just a list of predetermined commands. You can:
  • Compose commands
  • Bundle batches of commands together for easier reuse
  • Define your own custom commands
  • Create programs to modify the world in certain ways, adding new features that the tool did not originally start with
  • And more!
While developing Enki, I realized its potential is much larger than just a world editing tool; it could replace vanilla commands entirely, offering a more powerful and much more usable alternative (don't even get me started on how terrible vanilla commands are). That's going to be for later though, and I'm going to focus on getting up to feature parity with world edit for the time being.

2. XSUI

XSTD is a bundle of libraries for C99 that I'm currently working on, mostly aimed at providing basic utilities and such. As part of it, I'm creating a GUI library that I call XSUI. It will be a simple Immediate mode-style GUI that will support multiple different graphics backends (currently focusing on SDL2* ). My goal is for it to be something simple you can use to throw together a GUI app, while still being usable for larger applications. In addition, I want GUIs built with it to be user-editable to an extent. Panels should be able to be moved around to different spots, and users should be able to bind keybinds to any button action (similar to Blender).
Currently I have uh... a single button rendering. But it took me a while to even get that, given that I had to make an entire generic graphics backend interface and the whole framework for arbitrary UI elements, using only what C99 has to offer.

3. FR4NKEN

Okay, this is a fun one. I'm not sure if I'll actually continue this project but it's been very fun so far. It's hard to describe exactly what this project is, as it's trying to be... well... everything. It has no set goal, nor a set way to get there. And an important part of being everything is using every programming language. The goal is for FR4NKEN to contain as many programming languages as I can fit into one program (I just realized, the final binary size will probably be massive).
It works by creating a C API for fr_Objects, which are simply some arbitrary data and a collection of methods. Each method takes in a list of values and returns one value. The values themselves are tagged unions called fr_Values. This allows code to expose itself in a way more complicated than a pure C API, and in a way that's easily reflectable (important for binding to scripting languages later). Really though, this project has just been writing a lot of bindings. I might actually forgo the "writing bindings" part of it and just rawdog the C API for every language, maybe with some utilities. This isn't as elegant but would definitely save a lot of time.

4. Hypersink

Agma Schwa's Cursed Conlang Circus 4 has been announced, and I'll be participating as I did the last 2 years. This time, I'm organizing a collaborative project, with the goal to create the most "kitchen sink" conlang ever devised. As well as that, we're planning an interesting documentary-style storyline to go along with it (somewhat in the style of Zewei's winning submission last circus). We have a basic idea of what the final result is going to look like, but we're still making the specifics.
⇒ If you want to spoil yourself on what it's going to be like, click here.

5. Conclusion

And that's about it! I have more projects but none of them are particularly active right now. If I end up working on them I'll mention them in other blog posts.

6. Discuss

⇒ Geminispace BBS ⇒ Raddle

Footnotes

* I am aware that SDL3 is a thing that exists now, but it's still rather new and not as easy to install, so for maximum portability I am currently targetting SDL2. In the future I may add an SDL3 backend, however! ↩︎

To be entirely honest, C is kind of a terrible language. There's so many bad things with the design (although it could be much worse) to even list. Zig is a much better language with much more sane design, but alas, I keep returning to C anyway. ↩︎


Groups: Blog