Saturday, January 06, 2024

Hector v131, Textfile v102

Sigh, a huge and very full day, endlessly working on, and testing, the most tedious of things: text processing. The original class I used on Gunstorm II, and all games prior, supported 127 characters at most - a char, a signed byte. At some point recently, probably for the Taskforce remaster, I've upgraded all of this to support over 150 characters; a complete set of European language lettering to support just about every language apart from complex ideographical languages like Chinese, Japanese, Korean etc.

Today, my plan was to update this text class. It was in need of an update, there were lots of potential crashes and a definite lack of null-pointer checks. But little bugs kept appearing, just little annoyances. Crossing the 127 limit made the char values negative, so I used little internal unsigned variables to check and adjust things if the bytes needed inspection, but the whole thing was too complicated. Gunstorm used the old 127 limit, so didn't really need an update, but I really should update ALL games to the latest thing, and every game should be simple enough and robust enough to cope with an upgrade.

So in the end I switched to using unsigned bytes throughout, which makes far more sense, but it meant rewriting routines to print text, measure text, and complete complex substitutions (controls like 'fire', 'thrust' can be substituted with the keyboard key).

This has taken all day, a day prone to finding silly bugs on an hourly basis. As soon as I thought it was all fixed, new errors would appear. This is why game developers tend to use off-the-shelf engines; it saves hours of bug-hunting for simple things like text processing. Yet, off-the-shelf engines can be full of bugs too. I can't tolerate any bugs. I really try to fix every single one.

One other job was to translate the full possible set of keys, including joypad controls, 'shoulder' buttons and that sort of thing. The new controls have been there a while, but never translated into French or German, so I did that.

So ends day two of these game conversions and all I've done is upgrade the engine to a basic level. Almost all of the day was updating (and fixing) the main engine rather than adding those changes to the games. Both games are now running using the ancient graphics, and 22050hz wav sound. Both games still have 'demo' versions, links to buy from Share-It (remember them! that dastardly company that sold my games and sound effects for over 10 years, then deleted my entire catalogue and kicked me off without warning when the sales dried up for a month or two), and other things that need removing and updating for a Steam release.

My head is spinning.

My mouth is healing well, and aside from a tinny taste I can practically speak and eat like a normal human.

The next jobs are to file the current set of legacy graphics (I wonder if they could form some sort of option for customers - DLC?) before I update them all to at least double the resolution.

I've been musing on how to improve the other games; Bool, Firefly, and Breakout Velocity. So far, I've generally updated the look and sound of my old games, but not really changed the gameplay much. I think these games need a revamp too - they need to be made better. Breakout Velocity could do with a new name, and perhaps combining with Fallout. Firefly, a Pac-Man clone, might work in 3D first person, that might be interesting, and all games could use some algorithmic level generation.

Arcangel may be the most difficult to get working, partly because it would need an ancient size of screen, probably 640x480 pixels. As a 2D bitmap game, it can't be upgraded for modern computers without redrawing the graphics, and that took a year or so originally, with painstaking help from Andrew. This is my oldest code. My first Windows game was Thermonuclear Domination, but I've lost the source code to that, so the Arcangel is ancient and liable to be full of bugs and things that have been long since superseded. That fact, and my suicidally unhappy associations with this doomed project, causes me to delay work on it.