This Could Be Better
banner
chubbiest-dotterel.bsky.social
This Could Be Better
@chubbiest-dotterel.bsky.social
Writing various fractions of low-fi video games and utility programs at a glacial pace, and having a blast doing it. When not squinting at the screen and cursing.
Using the techniques sort-of-described in the last couple of posts, I have traced out the maps of the bottom three levels of the first world of the original game. Mostly. Where the structure got very intricate and mazelike, it got a little hard to read. And again, I can't do different levels.
November 18, 2025 at 4:11 AM
(Also, just in passing, ImageOverTextCompositor can be used to create "meme" images.)

(Also also, even more in passing, did you know that the image for the "Distratcted Boyfriend" meme is an homage to a Charlie Chaplin bit?)

github.com/thiscouldbeb...
github.com
November 16, 2025 at 6:50 AM
I noticed a few things:
1. It's hard to match the text up with the lines of the map exactly.
2. It's hard to make certain diagonal walls in this representation.
3. There's a bunch of bridges and islands sticking out of the water on this level, and as yet there's no good way to encode all that.
November 16, 2025 at 6:10 AM
I've written a new utility I'm calling TextOverImageCompositor, which allows the user to superimpose text of arbitrary size and color over a background image. I've used it to (mostly) convert the map of the third level of the game's first world to ASCII text using my SquarePlusMinusPipe font.
November 16, 2025 at 6:07 AM
The utility that converts line-art images to meshes was also enhanced a bit, to parse the image into edge objects, serialize those, and display the resulting text, then to convert those edges to mesh objects, serialize THOSE, and display the resulting text again. Eventually, I'll deserialize that.
November 14, 2025 at 12:26 AM
Oh, and I fixed the irritating "phantom" single-unit-length edges that were appearing within narrow walls. Like, wherever two walls "crossed", the junction would show an x inside a square, and similar problems There's a screenshot of the problem in a previous post. Compare the new version:
November 14, 2025 at 12:24 AM
Also, I introduced a special character in the text-to-line util to split long edges into smaller ones. This was intended to make it easier to allocate the walls that make up the game levels into "zones" which can be loaded and unloaded as the player moves around, so as to save processing resources.
November 14, 2025 at 12:17 AM
I was so discouraged by the 3D stuff that I went back and messed with my utilities to convert text to line art and then to meshes. The line art is now drawn with single-pixel, non-anti-aliased lines with Bresenham's algorithm, which makes them more precise for later conversion to 3D meshes.
November 14, 2025 at 12:15 AM
Since last post, I have spent a lot of time messing with ThreeDeeMazeGame, in hopes of making it adhere more closely to my usual standards, with some success. I also hoped to create a dynamic light centered on the player. But I don't get WebGL, and I just broke the directional lighting.
November 14, 2025 at 12:12 AM
Right now there's no way to add floors or ceilings, or to choose textures for the walls (or floors or ceilings). This is to say nothing of making the floor slope up and down, or adding, like, lintels above doorways. That's going to be a complicated problem, and I'm likely to put it off a while.
November 10, 2025 at 6:15 AM
Eventually I'll have to replace the maze of halls and rooms in ThreeDeeMazeGame with more generalized meshes for the environments in UUW2. Towards that end, I worked on the LineArtImageToMeshConverter repository, at github.com/thiscouldbeb.... I'll need to further adapt that to allow for import.
November 10, 2025 at 6:10 AM
While futzing around with ThreeDeeMazeGame, I tried to enlarge the size of the display and suddenly the view flipped upside down! This was because I don't understand the matrix math, and all those years ago, I just put in a random fudge factor for one present view size. I had to make it negative.
November 10, 2025 at 6:06 AM
Since the last update, I've kind of gone the other way with it, working the conversation engine from the framework into ThreeDeeMazeGame, rather than working the 3D maze into my UltimaUnderworld2Clone repo. So you can now talk to the figure in the first room and get the "Prof. Surly" conversation.
November 10, 2025 at 6:00 AM
Some tweaks would be nice. Like some way to tell the different characters apart. Maybe by supporting different body shapes, and/or skin and clothing colors. Also, maybe raising the general fidelity of the mesh, maybe by connecting all the body parts and, who know, adding hands and faces, etc.
November 8, 2025 at 5:50 AM
The immediate plan is to work ThreeDeeMazeGame into the prototype for UltimaUnderworld2Clone, replace the existing maze with the first level of UUW2 somehow, and add boxy figures for each of the characters on that level. Then, when you get close to them and press a button, you can talk to them.
November 8, 2025 at 5:48 AM
Here's a screenshot of ThreeDeeMazeGame. Note that at some point I added another character, a chest, and a door, for flavor, though none of them do anything yet.

I have just finished refactoring this a bit so that it fits better into the standard game framework, and is more readable in general.
November 8, 2025 at 5:46 AM
Switching it up a bit, I'm giving some thought to how the action part of the game will work. My plan is to adapt a previous project, named ThreeDeeMazeGame. The object of that is to walk through a 3D maze to find the goal room while being timed. See thiscouldbebetter.github.io/Source/Three....
thiscouldbebetter.github.io
November 8, 2025 at 5:42 AM
In the last five days, I've worked a bit on the automated tests for the conversations on the first level of the game, trying to make it past the first few plot points, up to where one character gives your player the key to the sewers below the castle. That required working on some scripts and such.
November 8, 2025 at 5:39 AM
I've created a system test that runs through all the initial conversations with castle staff who refuse to speak to you until the king gives his speech, before the game proper starts.

That required a lot of rework to make the tests support asynchronicity. And a lot of missing conversation content.
November 2, 2025 at 9:53 PM
So I'll copy the .talkToTalker() method from that file and use it to implement some system tests for this project. As I start writing that test, I'll likely be implementing some more of the flow of the conversation.

Does this count as test-driven development? Almost certainly not.
October 30, 2025 at 4:20 AM
I have already written some end-to-end "playthrough" tests for another classic game reproduction project, for _Star Control 2_, that run through conversations the way I need. See, for instance, github.com/thiscouldbeb...
github.com
October 30, 2025 at 4:17 AM
The next step is probably to test it. That could be done manually, but it would take a very long time, require a lot of testing discipline, and leave a lot of unfound errors.

Instead, I'll use automated tests that run through one conversation after another and test if the expected conditions hold.
October 30, 2025 at 4:14 AM
The conversations file isn't complete yet. All the possible branches of the conversation are just kind of laid out one after the other. Some nodes are commented out. Any complex events, scripting, or conditional logic, other than which choice leads to which branch, hasn't been implemented yet.
October 30, 2025 at 4:12 AM
Okay, ten days later, I've made a first draft of all the conversations on the first level of the first region of the game. There are some relatively minor characters on lower levels that are missing, but this is probably good to get started.

Here's the first part for the first character:
October 30, 2025 at 4:09 AM
In fact, if I made some response options perform actions in the game, like picking something up or killing some creature, I could run the whole game from start to finish that way. I could even theoretically make rooms, and make a full text-based game that way. That'd be kind of complicated.
October 19, 2025 at 8:20 PM