ZZT Ultra

Discuss how totally awesome Bang! is here.

Moderator: Terryn

User avatar
Appetite4
Official Clamp School Defender
Posts: 204
Joined: Tue Nov 18, 2014 4:57 am
Contact:

Tighter engine, Mouse pathfinding

Post by Appetite4 »

http://www.chriskallen.com/zzt/ZZTUltra.html

Version 0.7. Engine has a lot of new stuff. Like...

Core Gameplay
  • Spacebar now shoots in last move or shot direction. Previously, it only worked with last shot direction. I did know about spacebar, but it always seemed inferior to just using shift. Anyway, it's correct now.
  • When status elements changed to non-stat, the color now matches the original stat color and not the tile underneath.
  • Savegames now remember zapped label status. It appears I was burned by my own attempts at optimization. Now savegames store the "zapped" and not the "original" version of the ZZT-OOP code.
  • THUD message is now handled on the next turn after a #WALK collision. Previously there was no delay, which screwed up many worlds that required precise timing. The previous issue with Dr. Z being uncatchable in Smiley is now fixed.
  • #TRY had been using up a turn even if the movement attempt failed. This was wrong; an object keeps going now if unable to move.
  • Objects caused errors when trying to move into transporters. Strange, I know.
  • Squashing at point-blank range by pushers was slightly off; now it works better.
User Interface
  • Confirmation buttons now appear for Yes/No messages. Not a big change; Y/N keys still work as before. Now left/right/tab/mouse selection can also select Yes/No.
  • Scroll interface button alignment was a bit off. Should be better now.
  • Mouse can be used with scroll interface. It isn't designed to match the original ZZT behavior; it is a lot more in line with what you would expect of modern mouse behavior when given a scrolling window. The mouse cursor position moves the red arrows (they can select something other than the center of the scroll), and the mouse wheel scrolls the display.
  • Mouse can be used in the game. Once again, I didn't try to ape the original ZZT behavior, because the original ZZT in-game mouse behavior was laughable at best. It's a lot more "Diablo-style" in how it operates: a click moves the player to that location, and Shift+click fires towards the location.
Please note that mouse behavior is by no means final. The click-to-move controls, in particular, have some odd quirks when picking ideal navigation paths. Still, the nav works reasonably well for what it is worth. Try it out in the Bug Maze in Town of ZZT and you'll see what I mean.

BTW I'm still chuckling at the notion of "butchering a masterpiece." I'll be worried only if Mr. Sweeney comes out of the woodwork and chastises me for throwing paint on his Mona Lisa.
User avatar
bitbot
Official Clamp School Defender
Posts: 328
Joined: Thu Mar 01, 2012 3:00 am
Location: earthbound
Contact:

Re: ZZT Ultra

Post by bitbot »

Eh, who cares? It's not like you're gonna finish it anyway.
Image Image
User avatar
Appetite4
Official Clamp School Defender
Posts: 204
Joined: Tue Nov 18, 2014 4:57 am
Contact:

Turning yellow into green, and blues

Post by Appetite4 »

My play-tests of the Z2 featured games are gradually turning more worlds green on the progress tracking page:

http://www.chriskallen.com/zzt/worlds.php#worlds

Best of ZZT Part 2, Death, Mercenary, Smiley, Edible Vomit, and Wayne's Adventures are working now. But a curious problem has developed: ZZT Testing Blues.

Creativity when given limitations is a great measure of a person's worth. But despite the great talent of these world designers, ZZT is still relatively limited in how it looks and plays. This means you can only test so long before you've had enough. And testing the same part of every world, over and over...it's probably why I'm a programmer and not a software tester full-time. "ZZT Testing Blues," as I call them, are inevitable.

So, I'll let the pace of testing proceed at the rate my mind will let it. There is this huge "real world" out there that can also be explored. On occasion I like to go there, too.

But don't worry that this engine will be abandoned. Throughout my career, life had gotten in the way and projects had to be set aside.

Now, I truly have nothing to lose. I ain't doing this for money or fame; I require neither. You'll get the AS3 project in its entirety when it's complete. And it will, absolutely, unequivocally, be finished one day.

You see, I have a psychological hang-up that prevents me from breaking my word, even when welching is logical. It's sometimes called the "movie villain" complex.

All ahead full.
User avatar
bitbot
Official Clamp School Defender
Posts: 328
Joined: Thu Mar 01, 2012 3:00 am
Location: earthbound
Contact:

Re: ZZT Ultra

Post by bitbot »

Continue on, brave adventurer.
Image Image
User avatar
Appetite4
Official Clamp School Defender
Posts: 204
Joined: Tue Nov 18, 2014 4:57 am
Contact:

Timing tests

Post by Appetite4 »

I traveled earlier this week and took a laptop with me from several years back. During this time, I discovered that Commodore's complaints about the engine running slow during the screen transitions were indeed horrific!

Optimizing performance on Flash is...well, weird. Modern computers don't have much of a problem with updates, but the computers of yesterday lag quite a lot, depending on what you are trying to do. Scrolling the entire screen does not make performance lag all by itself, nor does having a lot of changes to the screen. The issue appears to be rapid changes to the screen that hit multiple small independent cells all over the screen.

So, getting the standard dissolve effect to work faster will require a few tricks. The current algorithm is just to write N random squares per 30th of a second, depending on the speed chosen for the dissolve. But this will be a serious performance strike no matter how many squares you choose to update. I'm thinking what will need to happen is a real-time test during screen transitions to test for lag. If lag is detected, the update will set twice as many squares with a double-length waiting period (only every 15th of a second). The delay can be extended even longer if lag continues despite the longer delay.

Did I lose anybody? Outstanding. That's how software engineers earn their pay, when nobody else understands how they do what they do.
User avatar
Commodore
fgsdfs
Posts: 2471
Joined: Wed Mar 12, 2003 5:44 pm
Location: :noitacoL
Contact:

Re: ZZT Ultra

Post by Commodore »

No idea how flash works, but maybe load the whole board beneath the other board then cut holes out of the overlaying board?

Or overlay a gif or other animation of the filling and dissolving. You don't actually follow the ZZT purple screen fade before the transition, but maybe that could be hardcoded and you could hide the board switch with that.
*POW* *CLANK* *PING*
User avatar
Appetite4
Official Clamp School Defender
Posts: 204
Joined: Tue Nov 18, 2014 4:57 am
Contact:

Major enhancement planned: incremental board saves

Post by Appetite4 »

Hi All,

I haven't updated the game for a while because there is quite a big change in the works right now. The attached image should give you an idea of how it will look.

Incremental board saving and restoration is something I had wanted to do almost from the beginning. It's not ready yet (there are many problems with maintaining that many seamlessly reloadable states in memory simultaneously). But I can show you what it looks like, at least.

With this enhanced restoration page, you can either restore from autosaves or use the traditional file-based saving system. You also have the ability to do a quicksave at any time, which adds another item to the restoration page.

The "autosaving" frequency will be configurable. Right now I'm tentatively setting it to time-based after 60 seconds, reenter-when-zap-based after 10 seconds, and board-change-based after 15 seconds.

FYI: ZZT Ultra probably won't react too well to "Braid" levels of save-stating, if you have a mind to set the frequency that high. ZZT is an experience best served cold.
Attachments
Incremental board restoration
Incremental board restoration
User avatar
Commodore
fgsdfs
Posts: 2471
Joined: Wed Mar 12, 2003 5:44 pm
Location: :noitacoL
Contact:

Re: Turning yellow into green, and blues

Post by Commodore »

Appetite4 wrote:But despite the great talent of these world designers, ZZT is still relatively limited in how it looks and plays. This means you can only test so long before you've had enough.
If you are just stuck on the featured game review ones, I have some suggestions. "Preposterous Machines" uses zzt objects like a mechanical computer to generate fractals and do other math things. "ZZTris" is of course a tetris style game. bitbot's "Link II" uses and abuses the play function to make music travel across boards. My own "Cat, Cat, That Damn Cat" is pretty good too and doesn't play like any other game. Also certainly play with the ZZT Encyclopedia by chronos. The "online" edition is the last version.
*POW* *CLANK* *PING*
User avatar
Appetite4
Official Clamp School Defender
Posts: 204
Joined: Tue Nov 18, 2014 4:57 am
Contact:

Autosaves have arrived!

Post by Appetite4 »

Here's version 0.8. This one has learned quite a few new tricks since last time around.

http://www.chriskallen.com/zzt/ZZTUltra.html

Engine
  • Incremental board saves: "S" can quicksave, and "R" can quickload from any save within the stored timeline after the board had been loaded. Note you can use "R" even from the game screen, not just from the title screen.
  • Board states are now properly reset when game is quit and restarted from title screen.
  • New debugging commands #DUMPSE and #DUMPSEAT; useful for code inspection.
  • New #SWITCHVALUE statement.
Optimization
  • Super ZZT updates its scrolling viewport MUCH more economically now.
  • Board transitions are now reactive to CPU speed. Old laptops no longer take forever to transition.
  • Sprite bank reconfigured to store color permutations for each character in foreground, so that color filter does not need to be applied at run-time. Basic memory/speed trade-off.
Fine Details
  • Multiple blank lines no longer display as a completely blank scroll.
  • Broken-apart scroll text works more smoothly now, such as when a #CHANGE occurs between sections of text.
  • Color mask FG/BG breakdown when status element goes over blinking tile is better. It's actually FG=0-3 and 7, BG=4-6. Before it was FG=0-3, BG=4-7.
  • Unfound target in #ZAP/#RESTORE target:label no longer reported as an error.
  • Improved #TRY when multiple #TRY commands chained together on one line.
  • #TRY IDLE counts as a failed move and will perform alternate action.
  • Bears had been incorrectly identified as squashable but not pushable. They are pushable now.
  • Instant flag change cheat: -flag and +flag.
  • New config property: OBJECTDIEEMPTY. Lets #DIE restore floor for OBJECT instead of leaving an EMPTY behind.
  • New config property: REENTRYMOVESTYPE. If set to 1, the original buggy "fake pickup" behavior for passages applies. Default is 0, which makes passages behave the same way as edge-navigation, which does not have "fake pickup."
  • New config property: SCORELIMIT. There really isn't a practical need to limit the score to the original hard ceiling of 32767, so ZZT Ultra has a default of 2 billion.
Got all that? There's going to be a quiz later.
User avatar
Commodore
fgsdfs
Posts: 2471
Joined: Wed Mar 12, 2003 5:44 pm
Location: :noitacoL
Contact:

Re: ZZT Ultra

Post by Commodore »

The speed is a lot better. If I crank it up to full speed it runs just a little below normal for me. I am actually going to try on a desktop pc when I get it hooked up, but don't judge by my knackered netbook.

Where it really slowed down when I was playing Castle of ZaZoomDa [sp?]. Just in the beginning, there's a board which I'm guessing is using #change gem color over and over again without idles, which in the normal game causes a glow effect.
*POW* *CLANK* *PING*
User avatar
bitbot
Official Clamp School Defender
Posts: 328
Joined: Thu Mar 01, 2012 3:00 am
Location: earthbound
Contact:

Re: Turning yellow into green, and blues

Post by bitbot »

Commodore wrote:
Appetite4 wrote:But despite the great talent of these world designers, ZZT is still relatively limited in how it looks and plays. This means you can only test so long before you've had enough.
If you are just stuck on the featured game review ones, I have some suggestions. "Preposterous Machines" uses zzt objects like a mechanical computer to generate fractals and do other math things. "ZZTris" is of course a tetris style game. bitbot's "Link II" uses and abuses the play function to make music travel across boards. My own "Cat, Cat, That Damn Cat" is pretty good too and doesn't play like any other game. Also certainly play with the ZZT Encyclopedia by chronos. The "online" edition is the last version.
Hey, thanks for the shoutout!

Not to toot my own horn but yeah, Link 2 is some 30,000+ lines of code with several new engines. It's all programming whether graphical, musical or otherwise. Some of us are just geared more towards front-end dev.

Edit: I think I'll give your MacGyver demo a playtest.
Image Image
User avatar
Appetite4
Official Clamp School Defender
Posts: 204
Joined: Tue Nov 18, 2014 4:57 am
Contact:

Question of Deployment

Post by Appetite4 »

I made MacGyver ZZT nearly 10 years ago! If it hasn't stood the test of time, remember, I was a different person back then.

Speaking of standing the test of time, Best of ZZT Part I certainly hasn't aged well. Especially the whole headhunter pyramid section--I remember having to save and reload lord knows how many times. We all tend to look at the past through rose-colored glasses.

In terms of more modern technical challenges, I feel it's time to address file-hosting solutions. I want to make ZZT Ultra maximally versatile, such that you can download the package from my website, and deploy it pretty much anywhere, to any other website.

To do this, several components will be needed in the system architecture:
  • ZZTUltra.swf
  • guis/zzt_guis.txt
  • guis/zzt_objs.txt
  • ZZT and/or Super ZZT world files
  • Indexing protocol
The first three are provided by ZZT Ultra. The World Files would be provided by whoever wants to host the content. The Indexing Protocol would also be provided by the host, but there are many different ways such an index can be accounted for.

The simplest indexing protocol is to specify a subdirectory where the content is (ZZT, SZT, WAD, ZIP, etc). But various filtering or categorizing options might be wanted, so an index resource file, fetched by ZZT Ultra, would also be possible. Such a resource could be a simple text file, containing a file list, or it could be something more involved, like a directory-evaluation script in Perl or PHP. The skill of the webmaster would need to play a part here, depending on how complicated this protocol needs to be.

To use zzt.org as an example, it appears PHP generates at least part of the dynamic content. The indexing protocol would specify ZIP as the target extension and multiple levels of recursion. This is just from my "black box" observations, of course. With website integration there is always a risk of being presumptuous.
User avatar
Commodore
fgsdfs
Posts: 2471
Joined: Wed Mar 12, 2003 5:44 pm
Location: :noitacoL
Contact:

Re: ZZT Ultra

Post by Commodore »

Just some random thoughts about the problems one might encounter connecting this to z2:

The archive has subdirectories for the letters that lead the zip file names, which do not always match the titles of the games.

Zips can contain multiple zzt files, sometimes with different initial letters.

I'm guessing unzipping would have to be done client side, or maybe there a libraries that will be nice and just read and grab individual files.

You could also just go the route of a file browser like system, setting up a list of permitted directories to browse. Handle this in a zzt-esqe window.

The PHP serving method would give you the benefit of attaching titles to files, or searching, but maybe you are thinking about it backwards. Rather than browsing games in the game, a database could have something like a "play now!" button. If the linked file is just a zzt file, the game autoloads, if it's a zip, "W"orld would give access to the contents of the zip. For us as an existing site, that would mean just adding a field to the returned results of a search, where the other way requires a new batch of code to appease whatever format the game requires.

And if you do end up prying open zips in some fashion, with built-in navigation, might I suggest a text reader of some sort to examine the txt files so often included with games. (As per Z2 rigorous and fascist requirements)
*POW* *CLANK* *PING*
User avatar
Appetite4
Official Clamp School Defender
Posts: 204
Joined: Tue Nov 18, 2014 4:57 am
Contact:

NEW: Hall of Music

Post by Appetite4 »

I decided to take a break from ZZT Ultra and work on a side-project: The Hall of Music.

http://www.chriskallen.com/zzt/hallofmu ... allofmusic

It's basically a composer/player/library for people who want to create and share #PLAY statement music. I have posted a few cover tracks that use ZZT Ultra's enhanced syntax, but there are plenty of rips from existing ZZT and SZT files. More to follow.

The motivation for this project? It happened while I was testing the save state capabilities in 0.8. There were many spectacular and silly failures before I had gotten the states working from a chronological standpoint. That some features of a world would be reset, while others remained changed, reminded me very much of Zelda: Majora's Mask. As always, I couldn't resist playing that game again for old time's sake.

The musical note "captcha" for the upload login screen was inspired, at least in part, by the ocarina codes. I suppose the captcha didn't need to be audio, but hey, inspiration is inspiration.

You can submit anything you want to the library...as long as you aren't 100% certified tone-deaf. In which case, the aforementioned captcha will be quite the barrier to entry.
User avatar
Appetite4
Official Clamp School Defender
Posts: 204
Joined: Tue Nov 18, 2014 4:57 am
Contact:

Re: Website Integration

Post by Appetite4 »

Commodore wrote:The archive has subdirectories for the letters that lead the zip file names, which do not always match the titles of the games.

And if you do end up prying open zips in some fashion, with built-in navigation, might I suggest a text reader of some sort to examine the txt files so often included with games. (As per Z2 rigorous and fascist requirements)
I plan to have an integrated "reader" that will evaluate the contents of ZIP files, WAD files, or subdirectories. I also intend to honor file links in the future, although these will require ZIP, WAD, or a subdirectory. The reason is that Flash security sandbox issues prevent multiple uploads that aren't user-input originated. Weird how it can tell, but it can.
Commodore wrote:The PHP serving method would give you the benefit of attaching titles to files, or searching, but maybe you are thinking about it backwards. Rather than browsing games in the game, a database could have something like a "play now!" button.
Believe me, I'm using this site as a model for integration. I've also cooked up a prototype PHP script that does pretty much all the work for you, called eval_dir.php. You can't, as a matter of principle, just enumerate a server's directory client-side, so a "universal" server-side script with a few key switches would work on any site that supports PHP.

Mind you, script security is important--that script I just mentioned is designed to evaluate web directories at the same level or above only, and only to the recursion level specified. Double-dot nav (..) and web root (/) don't work.
Post Reply