
I had some time to work on OASIS and indeed did a lot of work in the engine's internals. Unfortunately nothing to show yet, but I will try to have something nice as soon as possible.
I implemented a first version of the point&click interface (cursor which is moved using the arrows and clicks done with the space-bar), and some layout of the verbs to use as commands for the game. I also worked on the resources (strings, for instance are now resources which will be loaded from disk when necessary) and other tech bits, and the engine is taking shape.
Resources in memory have a small three byte header indicating the resource type (first byte bits 0-6) and status (first byte bit 7 - in-use or marked for deleting), and a resource size (two bytes). Then follows a sub-header, which is resource-dependant, but starts with the resource ID (we will have up to 256 resources of each type). A resource with a bunch of strings will look like:
RESOURCE_STRING | FLAG_IN_USE
size
ID
"Hello. This is OASIS",0
"The new Oric scripting system",0
"Still under construction",0
Strings will be stored compressed and will be uncompressed on-the fly with my decompression routine, and will be loaded and discarded from memory as required. Same with scripts, objects, room data, etc.
The most difficult part is the walk boxes system, which is 90% implemented (still some glitches to solve). Basically the play area is divided into boxes. If an area is not "walkable" (for instance there is something preventing the character to walk, such as a hole or fence) then either there is no box for that area or it is marked as non-walkable (in case the status may change later on). There is also a walk-matrix indicating the next box the character must walk to to reach a destination if it exists. When the character must move to a given coordinates, first the box containing those coordinates is calculated, then the matrix is used to decide the path the character must follow to reach them, if it is possible.
It is hard to explain, but it is the way things work in SCUMM making characters intelligent enough to find a path to a given destination if it exists without the need of clicking several times to direct it manually.
And it is nearly working perfectly now.
I still need to add the z-plane masks. In short, the engine is not 3D, so in order to make a char move behind an object, walk boxes have a z-plane number. The room also has z-plane bitmasks for each plane so, when drawing, the needed masks are applied to make the character look behind or in-front of a section of the picture. This is also how things are done in SCUMM, so nothing new, but I think it is quite a CPU consuming task: it needs to draw as usual, but applying these masks to prevent corrupting the images which need to be in-front of the character. And this process is in the most inner drawing loop. Fortunately, we don't need very fast drawing for this kind of games.
There is still a long way to go: adding objects, interaction scripts, managing inventory items and all the resource loading from disk.
Oh, and I will need a nice font. For now I am using the one in Space:1999, but I'd prefer a 8x6 nice font, such as the ones Dbug usually designs

Here is a screenshot: Let's see how far I can go with this project...