Here's version 0.5, with substantial engine improvements.
The "Options" on the debug menu now work. This gives you a configuration suite with JSON-organized properties. You now have a great amount of control over how the engine plays. And it lets you cheat like no other ZZT clone lets you cheat.
There are also "Console" controls on both the ZZT and Super ZZT gameplay screens. These let you modify various properties and variables at run-time. Once again, a cheater's delight.
Some examples of world properties you can modify:
- BLACKDOORGEMS and BLACKKEYGEMS: The "256-gem" mode is activated by setting these to 1. Otherwise, black keys just act as yet another key color.
- BLINKWALLBUMP: ZZT Ultra doesn't make blink walls kill you if trapped. You can turn on this behavior by setting this to 1.
- GAMESPEED: Now speed can be changed at any time.
- KEYLIMIT: Lets you carry more than just a single key of a color at once.
- KEYSBLOCKPLAYER: Set to 0 to allow for "step over" of uncollectable keys.
- PLAYERDAMAGE: Was 10 always just a little too high?
- PLAYERFIREDELAY and PLAYERRUNDELAY: I found a way to de-couple the operating system's keyboard repeat rate and delay settings from the run and fire delays observed in ZZT Ultra. Unless the rate and delay is already set in the OS to something very fast, you can set them to anything. Note that 8 is a reasonable speed IMO, which works out to 8/30ths per second. If you set it to something lower, like 4, the ZZT Guy moves and shoots a little "too" responsively.
- PLAYRETENTION: You might have noticed that the sound effects and #PLAY statements are on different channels. Set this to 0 to go back to one-channel sound, without reverb. Of course, it sounds worse.
- POINTBLANKFIRING: VERY IMPORTANT--this definitely needs to be set to 0 for some worlds.
- NOPUTBOTTOMROW: Controls the bottom-row #PUT bug restriction.
- ENERGIZERCYCLES: Set to something like 10000 and you're basically a god.
- TORCHCYCLES: Set to 10000 and you have an ever-burning torch.
Board properties should look very familiar. Can be fun to tweak some things, like the board destinations, time remaining, dark factor, etc.
Global variables are a superset of the original world flags. I tried to prevent conflicts with the original world flag namespace by starting most engine variables with dollar signs, since you can't use that character in a variable name in ZZT or Super ZZT.
Knock yourselves out.