Last updated 2023-02-20
What I am currently doing / thinking / planning
This page has some things that are currently at the top of my head, projects that I'm most likely to update next, and so on. Think of it as a very stripped down version of a personal blog.
Things I've been doing recently
- Experimenting with XHACK and other alternative language designs.
- Experimenting with asset loading for Volve. I want to do something fairly esoteric with that game so I need to come up with an unusual asset loader. The TL;DR of it is player-made content.
Projects that are usually rolling around in my mind (in no particular order)
- Looting RPG of sorts. I've had vague ideas for this kind of game for a very long time, recently I got inspired by another game that gave me a new vision about this game and got me excited about it. Ideas only, haven't worked on it, there's no page for it on this site yet.
- Life In Town, a farming-like game with heavy focus on NPCs. Ideas only, haven't worked on it, there's no page for it on this site yet.
- A-Kingdom, a colony/city management game vaguely reminiscent of Rimworld. Ideas only, haven't worked on it, there's no page for it on this site yet.
- A small game of some kind. I have various ideas for small games that I might want to do, but I don't have all the engine systems that I'd need for comfortable rapid prototyping (mainly graphics/text related).
- A desktop graphics program, essentially a successor to PaintGO. There's no page for it on this site yet. This excites me a lot but it's such a big project that it's not easy to find the time/motivation to work on it. My initial goal is to replace MS Paint with it, and eventually replace Krita with it. I've worked on it a little bit but it's not really usable for anything yet.
- EasyVideoCrop, parts of the UI need to be remade so I can add new file formats like webp and webm/VP9 without the code turning into horrible spaghetti.
- FilenameWrangler, I use this program a lot and want to remake it, but my UI system is still unfinished.
- My own Imageboard, I have designed all of it (the screenshot is even a bit outdated) but haven't built it because I don't have the server systems to build it on.
- XHACK. Every time I program these days, I start wishing I had a better programming language, but there's nothing that appeals to me at all so I want to make my own.
- UI systems, the ones I've used so far in my programs are clumsy and I need a better one so it's easier to make and maintain programs.
There's a couple things that I consider to be major blockers in my way to making more stuff. Things I need to get done before I can move onto a higher productive state.
- Text rendering. It's fairly easy to draw bitmap text (copying letters from an image like this), but it becomes more complicated when you want to scale up the text for high resolution displays, support languages like Japanese, and even more if you want to render in the GPU with foreign languages (in the GPU you can't just allocate more memory for extra characters, you have to start juggling several texture atlases per-character). I've never had a good text rendering system that can draw text easily and with high quality. stb_truetype.h is a great library for getting letters out of a font file with ease (which solves the foreign language problem), but there's issues even with that. While I can draw text to a satisfactory degree, it's always a bit awkward and not flexible.
- GPU rendering. Although it's far more complicated than it should be just to draw some pictures with OpenGL, it's still doable without too much problems. However, it's a lot harder to make a full fledged rendering and asset loading system for a videogame. Any non-trivial game that isn't 20x zoomed in pixel art is probably going to require a lot of texture space, it's not only difficult to switch between textures without slowing down the rendering by a lot, it's also hard to know how the assets should be loaded in. Will the GPU run out of memory? How do you know if it's out of memory? When do you unload textures and load new ones? How do you know which textures you can unload? If your textures are in a sprite atlas, it may not be so simple to remove a texture from it. There's a lot of unknowns and very little guidance online, information tends to be focused on more fundamental basics, not how to architect the high level things. Even if I build an asset loading system, I don't really know what's going to happen because I don't know what happens when a GPU runs out of memory for textures, and search engines are useless for finding an answer to that question. The only way to really solve this problem is to experiment and learn by doing and then re-write everything after I understand it.
- A UI system. I've made several different UI systems, but I don't feel satisfied about any of them. I haven't figured out a good way to do it because it needs graphics, text rendering, and input handling all at once. Especially text input fields are complicated because they require all 3. The problem is basically that if I decide that the text rendering system is ugly and want to change it, I would have to redo large portions of the UI system (particularly text input fields which need to interact with individual characters). If I want to switch from CPU rendering to GPU rendering, I would have to redo a lot of the UI system. If I change my input handling a little bit, the whole UI system breaks apart (especially text input fields which require detailed mouse and keyboard input data). I can't find a way to isolate the UI system from the other things such that the UI system is easier to move between projects and more compatible with different surrounding systems.