If I’m correct about which text it was supposed to write, it was “Your little finger begins to twitch, and then your whole body is free again”. (At least, I didn’t see that text even through the spell timed out.)
I’m thinking this could happen it it needs three pages at the same time in the buffer that can only hold two pages - one page where the PC points, one page with the string to be printed and then a third page holding the abbreviation string.
I haven’t managed to reproduce this yet, but will look for problems in the code regarding this theory.
With the infrastructure already in place, it seems that adding a “mutiple exception” isn’t such a big deal. Something like this seems to take care of the “DROP ALL” glitch:
(<AND <EQUAL? ,P-GETFLAGS ,P-ALL>
<VERB? DROP PUT PUT-ON GIVE SGIVE>
<NOT <IN? .O ,WINNER>>>
<AGAIN>)
So that might be safer than removing SEARCHBIT. You still get the glitch if you “DROP BRICK AND STRING”, but there I think it makes sense.
Let’s hope so. The current development version of the game is 53,400 bytes with Henrik’s abbreviations. Disabling the debug commands brings it down to 53,284 bytes. If I understand correctly, that’s still slightly too large for a 3-page version.
I just uploaded an experimental version which skips the buffers altogether. It may be a tad slower, but if the problem had to do with the limited buffer it should now be gone.
Getting rid of the buffers also means it should now, in theory, be possible to build a game where the storyfile is up to 54272 bytes, although I’m currently having trouble using the last 256 bytes of that.
The same thing happened to me again, I’m afraid:I got “zzz.” instead of the text telling me that the Wizard’s spell had timed out. It seems all I had to do to reproduce that was to wait in the first room for the Wizard to appear and cast a spell where you do get a message when it times out. (I.e. one of Feeble, Freeze, Ferment and Float.)
Annoyingly, it can take quite a while for him to appear.
I see nothing strange about the message. It starts with the abbreviation “You” and has lots of other abbreviations in it, but it looks fine.
I tried building the game as a normal disk-based game with Ozmoo, waited about 500 moves until he cast the right spell, and sure enough I got the correct message. So it’s not related to the buffers, but to the non-virtual memory build somehow. Will investigate further tomorrow.
Found the problem. Ozmoo skips everything past the last page border - the last 122 bytes are not in memory. This probably happened when I hacked make.rb to not pad the storyfile to a 512 byte multiple when building a single-file game, to make it fit. Will have a look and certainly find a solution tomorrow.
In hindsight, I should have realized right away that “zzz” is exactly the reply you get if the first two bytes of the compressed string are $FF $FF, and C64 memory is filled with alternating areas of $00 and $FF from start…
I decided to make a Release 13 with the last few fixes I’ve made. Maybe it can get some outside testing, because right now I’m not sure if I’m the only one who’s ever played it through from start to finish.
This one grew a bit: It’s 54,160 bytes with ZILF 0.9 abbreviations. Unlike earlier releases, I wasn’t able to find anything to remove to offset the changes I made. But I don’t think it’s a problem.