Bringing back the Dream in DreamZZT

It may not be as exciting as the iPhone, but I have some DreamZZT news:

I got on-the-fly board compression/decompression working. Instead of requiring over 6MB of RAM to run Town of ZZT, it now uses less than 600KB. Only the board you’re currently on is decompressed, the rest of the game remains compressed until needed.

This enables several important things:

* The Dreamcast build works again! It still has a few quirks that need to be worked out, but Town is fully playable on the Dreamcast again. There’s a slight pause as boards are compressed/decompressed, but otherwise the game runs fine. I currently have no plans to enable the online leaderboard for the Dreamcast, as the number of people with Dreamcasts that also have BBAs and are interested in ZZT is probably around 3, including me.

* The saved games and world files written by DreamZZT are now compatible with the original ZZT. If for some crazy reason you prefer DreamZZT’s editor over kevedit, you can use DreamZZT to create worlds compatible with the original ZZT. You can also exchange saved games between the two.

Why weren’t they compatible before?

ZZT has an extra field that stored the size of each compressed board in the world file. This value was ignored by DreamZZT, since it decompressed all the boards as it loaded the file. It also didn’t know how large each compressed board would be, as it compressed each board as it was writing the file. Now that the boards are always compressed, DreamZZT knows ahead of time how large each board will be, and can fill in this value.

As a side note, KevEdit also ignores this value, so you can load old DreamZZT games in KevEdit and then save them again to make them compatible with original ZZT.

DreamZZT 3.0.6 is still on track for a stable release on Saturday.

DreamZZT 3.0.6b2

In celebration of the new trac sites, I’ve put together a new public beta for DreamZZT. You can grab DreamZZT 3.0.6b2 from the DreamZZT site.

I’ve also started a compatibility chart on the wiki to show how well games work with DreamZZT. I can’t test every game ever made for ZZT, so if you find a game that works or doesn’t work, feel free to update the wiki page. You need to register for an account to edit the wiki, to avoid spam.

Also, please create trac tickets for any issues encountered or features you would like to see in future versions of DreamZZT. You don’t need an account to create a ticket.

If no significant issues come up with beta2, 3.0.6 should be released next week.


DreamZZT can now save your games to the website:

And play them through the in-game browser:

Mr. Taskman

I’ve decided I’m going to open source the server-side scripts for DreamZZT too. I’ve decided to write everything as a a Vanilla extension, so in theory all you would need to do to run a DreamZZT server would be to install Vanilla and activate the DreamZZT extension.

Here are some screenshots of the admin section:

I’m hoping to have the online tasks system finished this weekend, so I can tackle the online save storage and finally the online leaderboard.

Xbox Schmexbox

To spice up the online aspects of DreamZZT, I’m playing around with an XBox Live-style achievements system:

Aside from a score bonus, completed tasks would also be viewable on the web. Of course, the tasks will be a bit more challenging when it’s out of testing 😛

The tasks runs independent of the ZZT game, so they can be added to any game without modifying the original game file.

Some of the more realistic tasks I have in mind for Town:

  • Talk to a tree (touch the ZZT-OOP object named “tree” or whatever that tree’s name is)
  • Crack the safe (Walk into the bank vault area where the gems are, probably by defining a box the player walks through. Or collecting the purple key inside the safe.)
  • Find the combination (No more invisible walls on the board with the bank vault combination)
  • Bear Hunt (Kill x bears, need to count how many are in the game and come up with a reasonable amount to kill)
  • Treasure Hunt (same as above, but with gems. Probably more than 3.)
  • And? (touch the “Congratulations! You found an ampersand!” object)

I’m sure I’ll come up with more once I get further into it.

DZZT.NET revived

As a follow-up to my previous post, I think I’m going to offer an online save game storage service along with DreamZZT. Users that want to participate in the leaderboard will download the zzt game file through the client, and if they want to save their game, it will be saved to the server. That should hopefully deter casual cheating.

To make that happen, I’ve brought back the DZZT.NET in-game browser:

I ripped out my hacked-together HTTP code and replaced it with libcurl which should be more reliable, and also allows for HTTP POST and HTTP PUT methods.

Interestingly, the only other game besides Town that I had up on that site was the ZZT Tour, and it’s no longer 100% playable. It revealed a few bugs that have cropped up since the C++ rewrite that I’ll have to fix.

King of Town

I’m thinking about having an online leaderboard for DreamZZT. The only issue is that it’s too easy to cheat, both from within DreamZZT and from outside it as well. I’m thinking about adding a special value in the unused parts of the world header to indicate whether you’ve cheated or not. This value would be cleared by DreamZZT’s editor and debug console, and external editors should also ignore it.

The drawback to that is since both DreamZZT and KevEdit are both open-source, there’s nothing preventing someone from adding support for this flag to KevEdit (or ZZTAE or another ZZT editor) and creating modified game files that still pass the cheating test.

Getting the high score would be as easy as changing your score in KevEdit, saving the file, and then dying in DreamZZT. Or distributing a modified game file with a new object that simply runs:

#give score 10000000

I’d consider running the leaderboard on the honour system, but the Z2 crowd aren’t the most mature group of people. Even if I tie the scores to the accounts like DCSquares, it’s still a lot of administration work to have to determine whether a score is legitimate or not, and to go through and ban users caught cheating.


Move over KevEdit…

I added a few more widgets to the dialog box system: NumericInput, Slider, Direction, and tweaked I RadioGroup to be more usable. The result is the ability to edit object properties in the DreamZZT editor:

You can also modify the board properties:

It’s almost to the point where you could create a new game from within DreamZZT. I still need to write a board picker widget and a text editor for editing ZZT-OOP scripts.

DreamZZT update part 2

As a followup to yesterday’s post, here’s how the new icons look on Windows:

And using the standard Windows file dialog to open a file:

DreamZZT update

I made a lot of progress on DreamZZT this weekend. First, new icons:

Next, DreamZZT now uses the OS’s file browser to select files to load / save:

Finally, you can associate DreamZZT to open .zzt and .sav files and it’ll run them for you when you double-click them.