That is to say I’ve written the code to grab the current 32×32 area of the 128×128 world map that the player is standing in and display a 9×9 area of that as the viewport. This means wherever the player is, it will be possible to display a 32×32 area map. And the map loops nicely at the edges. Now where did I put that bag of gems of peering?
Author: Zedex Dragon
Home again, home again, jiggety jig
After two weeks in Cuba, a rather longer stay in Paris than expected, and a long weekend in Wales, I’m back in old London town and ready to settle down to some more coding.
RedBox SDK updated
Had a go at getting part of the ZXodus][Engine to run as part of a script in ZX BASIC (the scripting language used by the engine). Against all expectations it worked first time. I’ve added the latest development version of ZX BASIC to the RedBox SDK. RedBox is a WINE wrapper for the set of tools that are used to create assets and compile binaries for the ZXodus][Engine. Currently it’s Mac only until I find a way to build a Linux version. WINE doesn’t run on Windows, so there you have to install the tools separately. I’m now working on the next version of the character generator. When that’s done I’ll be able to re-use a fair amount of the code on the script engine.
[Edit] Well Apple has changed the underlying OS again and broken RedBox. Development is now moving to Windows.
Another failed test print
Tried some thinner paper which is supposed to be suitable for laser. Well it’s only coated on one side and the other side won’t hold the toner. So it looks like I have two choices for the Player Reference Card: I can either buy an inkjet printer, or I can get the cards commercially printed. Given what a short run it’s going to be I think buying an inkjet might be cheaper.
Tools
Over on the links page I’ve highlighted some of the tools I’m using. However, when I started my original project to port Ultima IV to the Chloe 280SE, many of these tools didn’t exist. So I wrote my own, or adapted what I could find.
Written in 1996, TrueFONT was my first foray into assembly language. Most of it was written in compiled BASIC, but I didn’t want to drop back to BASIC to handle loading and saving, so I wrote some code to do that directly. I still use it from time to time, but now I mostly use Klaus Jahn’s FZX font editor. FZX is a proportional font format for 8-bits that I came up with. Unlike most 8-bit font systems, it supports kerning. But it was overkill for the ZXodus][Engine.
For Spectrum graphics I’ve been using The Artist 2 since I got it in the 1980s. However, I ended up hacking it to suit my needs and eventually released my patched version as The Artist 3.
Before I wrote the tile engine, I needed some tiles, so I wrote a tile editor, again in compiled BASIC. It’s slow and clunky, and only runs on the Timex TC2048 (using hardware 8×1 attribute mode). But it does let you see the bitmap without the color, which you can’t currently do with ZX Paintbrush. The ColorTILE format that I created for ZXU4 has now been used in several other engines.
View window
I’ve slightly modified the view window so that the text has at least a one pixel gap around it. I also had to change the moon and direction windows to make it easier to clear before printing to them. There is a small amount of attribute clash (or color bleed if you prefer) but I think it’s acceptable.
Window cleaning
As the text display is XORed with the background, I needed some code to clear the area the text is written to. This is now complete for the moon phase, wind direction, roster, status bar, and console windows. I’m not sure if I’ll want to put text in the view window so I’ve left that for now. Now I just need to integrate the y-position lookup for those windows and I will be able to print to any area of the screen. With a slight update to the character set I’ll also be able to do inverted text by overprinting a block character.
Moon phases
I had toyed with the idea of doing a realistic 9-day/14-day cycle. But the code would be much longer than a simple 28 byte lookup table. And space is a concern.
Main output window finished
A small milestone, but I managed to improve the efficiency of the display code by pre-calculating the Y coordinate. This was being done for each character so it’s quite a time saving. It does mean I will need to work out what the other values should be if I want to print anywhere outside the console window, but I think it’s probably worth it.