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.
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.
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.
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 forums.c99.org 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.
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.