I finally decided to implement my engine idea, and I'm happy that I didn't give up because the results are totally worth it!
Basically my usual tile/sprite engine uses a linear back-buffer split in 8x16 or 8x8 cells. That buffer is used to compose the scene (background + sprites) and track the cells that have changed between current frame and the previous. Then the screen is updated drawing only the cells that change, of course as fast as possible. It really helps that the back-buffer is linear, unlike the CPC video memory. Drawing the sprites is trivial and quite fast!
This works very well and I've successfully used the idea in all my CPC games so far, and I'm happy with it: it provides performance in exchange of memory use.
And that's the only weak point of the idea, as it uses a lot of memory and makes quite hard to make big games in 64K (please, don't start with the 64 vs 128 argument; not interested).
Since Magica I've been thinking on how to reduce the memory usage while maintaining the strategy of tracking changes, because most of that back-buffer is not used (there's a limit in the number of sprites you can move per frame anyway).
Now, this is the idea: instead of having one large buffer, each sprite splits the draw operation in cells (e.g. 8x8), using the cell's linked mini-buffer if it exists, or allocating a new one. Every time the screen is updated all mini-buffers are unlinked, so in practice only "sprite height x 2 + 2" mini-buffers are require per sprite in worst case (the sprites don't overlap). Say that you want to move 10 sprites of at most 8x24 (like in Golden Tail), and your buffer is just 2816 bytes.
How big is the difference? Well, in Golden Tail that back-buffer is 13056 bytes (plus the structures to track the "dirty" cells). So that's a lot!
The downside is that drawing the sprites is quite complicated now. Other operations are simpler and I save bytes and time (for example, the translation from the linear back-buffer to the CPC video memory is gone), and that helps a bit to compensate for that complexity drawing sprites; but I don't think a game like Magica would be possible with this engine (although I haven't tested it, yet).
Anyway, I think I can't more or less get the same performance than in Golden Tail, with a lot of less used memory; which means that Kitsune's Curse will be a larger game.
I'm starting now with graphics and re-implementing the platforming engine to "fix" some bits in Golden Tail that could be better (based on feedback from players), and I'm experimenting with some new ideas that hopefully will add to Kitsune's Curse gameplay.
And that's all for this update!